Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

systemd: add -Wno-error=format-overflow if isPower #282607

Closed
wants to merge 1 commit into from
Closed

systemd: add -Wno-error=format-overflow if isPower #282607

wants to merge 1 commit into from

Conversation

ghost
Copy link

@ghost ghost commented Jan 21, 2024

Description of changes

Required in order to get the NixOS installer to build again.

CC: @hlandau

Things done

  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)
    • sandbox = relaxed
    • sandbox = true
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • 24.05 Release Notes (or backporting 23.05 and 23.11 Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
  • Fits CONTRIBUTING.md.

Add a 👍 reaction to pull requests you find important.

@ghost ghost marked this pull request as ready for review January 21, 2024 14:48
@ghost ghost self-requested a review as a code owner January 21, 2024 14:48
Required in order to get the NixOS installer to build again.
Copy link
Member

@NickCao NickCao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also required on riscv, this deserves an upstream fix.

@flokli
Copy link
Contributor

flokli commented Jan 21, 2024

I'm happy shipping a arch-specific override, but it should have a comment alongside pointing to the upstream PR, so we know why it's there and when we can drop it.

Is there any way to reproduce this without a riscv or power computer?

@NickCao
Copy link
Member

NickCao commented Jan 21, 2024

Is there any way to reproduce this without a riscv or power computer?

nix build .#pkgsCross.riscv64.systemdMinimal

@RaitoBezarius
Copy link
Member

To be precise, here's relevant logs for RISC-V:

systemd-minimal> In file included from ../src/basic/macro.h:446,
systemd-minimal>                  from ../src/basic/alloc-util.h:10,
systemd-minimal>                  from ../src/shared/install.c:12:
systemd-minimal> ../src/shared/install.c: In function ‘install_changes_dump’:
systemd-minimal> ../src/shared/install.c:444:64: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   444 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s does not exist.",
systemd-minimal>       |                                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:444:31: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   444 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s does not exist.",
systemd-minimal>       |                               ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:444:75: note: format string is defined here
systemd-minimal>   444 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s does not exist.",
systemd-minimal>       |                                                                           ^~
systemd-minimal> ../src/shared/install.c:403:55: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   403 |                                                       "Failed to %s unit, file \"%s\" already exists.",
systemd-minimal>       |                                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:402:39: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   402 |                                 err = log_error_errno(changes[i].type,
systemd-minimal>       |                                       ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:403:66: note: format string is defined here
systemd-minimal>   403 |                                                       "Failed to %s unit, file \"%s\" already exists.",
systemd-minimal>       |                                                                  ^~
systemd-minimal> ../src/shared/install.c:399:55: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   399 |                                                       "Failed to %s unit, file \"%s\" already exists and is a symlink to \"%s\".",
systemd-minimal>       |                                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:398:39: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   398 |                                 err = log_error_errno(changes[i].type,
systemd-minimal>       |                                       ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:399:66: note: format string is defined here
systemd-minimal>   399 |                                                       "Failed to %s unit, file \"%s\" already exists and is a symlink to \"%s\".",
systemd-minimal>       |                                                                  ^~
systemd-minimal> ../src/shared/install.c:440:72: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   440 |                                 err = log_error_errno(changes[i].type, "Failed to %s unit, invalid unit reference \"%s\".",
systemd-minimal>       |                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:440:39: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   440 |                                 err = log_error_errno(changes[i].type, "Failed to %s unit, invalid unit reference \"%s\".",
systemd-minimal>       |                                       ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:440:83: note: format string is defined here
systemd-minimal>   440 |                                 err = log_error_errno(changes[i].type, "Failed to %s unit, invalid unit reference \"%s\".",
systemd-minimal>       |                                                                                   ^~
systemd-minimal> ../src/shared/install.c:437:72: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   437 |                                 err = log_error_errno(changes[i].type, "Failed to %s unit, cannot alias %s as %s.",
systemd-minimal>       |                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:437:39: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   437 |                                 err = log_error_errno(changes[i].type, "Failed to %s unit, cannot alias %s as %s.",
systemd-minimal>       |                                       ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:437:83: note: format string is defined here
systemd-minimal>   437 |                                 err = log_error_errno(changes[i].type, "Failed to %s unit, cannot alias %s as %s.",
systemd-minimal>       |                                                                                   ^~
systemd-minimal> ../src/shared/install.c:415:64: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   415 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, file %s is under the systemd unit hierarchy already.",
systemd-minimal>       |                                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:415:31: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   415 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, file %s is under the systemd unit hierarchy already.",
systemd-minimal>       |                               ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:415:75: note: format string is defined here
systemd-minimal>   415 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, file %s is under the systemd unit hierarchy already.",
systemd-minimal>       |                                                                           ^~
systemd-minimal> ../src/shared/install.c:432:64: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   432 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, refusing to operate on linked unit file %s.",
systemd-minimal>       |                                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:432:31: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   432 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, refusing to operate on linked unit file %s.",
systemd-minimal>       |                               ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:432:75: note: format string is defined here
systemd-minimal>   432 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, refusing to operate on linked unit file %s.",
systemd-minimal>       |                                                                           ^~
systemd-minimal> ../src/shared/install.c:423:64: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   423 |                         err = log_error_errno(changes[i].type, "Failed to %s %s, destination unit %s is a non-template unit.",
systemd-minimal>       |                                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:423:31: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   423 |                         err = log_error_errno(changes[i].type, "Failed to %s %s, destination unit %s is a non-template unit.",
systemd-minimal>       |                               ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:423:75: note: format string is defined here
systemd-minimal>   423 |                         err = log_error_errno(changes[i].type, "Failed to %s %s, destination unit %s is a non-template unit.",
systemd-minimal>       |                                                                           ^~
systemd-minimal> ../src/shared/install.c:448:64: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   448 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, cannot resolve specifiers in \"%s\".",
systemd-minimal>       |                                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:448:31: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   448 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, cannot resolve specifiers in \"%s\".",
systemd-minimal>       |                               ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:448:75: note: format string is defined here
systemd-minimal>   448 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, cannot resolve specifiers in \"%s\".",
systemd-minimal>       |                                                                           ^~
systemd-minimal> ../src/shared/install.c:419:64: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   419 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, invalid specifier in \"%s\".",
systemd-minimal>       |                                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:419:31: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   419 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, invalid specifier in \"%s\".",
systemd-minimal>       |                               ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:419:75: note: format string is defined here
systemd-minimal>   419 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, invalid specifier in \"%s\".",
systemd-minimal>       |                                                                           ^~
systemd-minimal> ../src/shared/install.c:411:64: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   411 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s is transient or generated.",
systemd-minimal>       |                                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:411:31: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   411 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s is transient or generated.",
systemd-minimal>       |                               ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:411:75: note: format string is defined here
systemd-minimal>   411 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s is transient or generated.",
systemd-minimal>       |                                                                           ^~
systemd-minimal> ../src/shared/install.c:428:47: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   428 |                                               "Failed to %s unit, \"%s\" is not a valid unit name.",
systemd-minimal>       |                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:427:31: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   427 |                         err = log_error_errno(changes[i].type,
systemd-minimal>       |                               ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:428:58: note: format string is defined here
systemd-minimal>   428 |                                               "Failed to %s unit, \"%s\" is not a valid unit name.",
systemd-minimal>       |                                                          ^~
systemd-minimal> ../src/shared/install.c:407:64: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
systemd-minimal>   407 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s is masked.",
systemd-minimal>       |                                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:214:86: note: in definition of macro ‘log_full_errno_zerook’
systemd-minimal>   214 |                         ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
systemd-minimal>       |                                                                                      ^~~~~~~~~~~
systemd-minimal> ../src/basic/log.h:254:41: note: in expansion of macro ‘log_full_errno’
systemd-minimal>   254 | #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
systemd-minimal>       |                                         ^~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:407:31: note: in expansion of macro ‘log_error_errno’
systemd-minimal>   407 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s is masked.",
systemd-minimal>       |                               ^~~~~~~~~~~~~~~
systemd-minimal> ../src/shared/install.c:407:75: note: format string is defined here
systemd-minimal>   407 |                         err = log_error_errno(changes[i].type, "Failed to %s unit, unit %s is masked.",
systemd-minimal>       |                                                                           ^~
systemd-minimal> cc1: some warnings being treated as errors

@flokli
Copy link
Contributor

flokli commented Jan 22, 2024

It's very odd that these log_error_errno macros fail because some of the things to log is null, on one specific architecture.

Is this a sign of a bigger problem? Can anyone try to execute some of the binaries produced (on riscv or power architectures), to make sure they're not just plain broken?

@NickCao
Copy link
Member

NickCao commented Jan 22, 2024

Is this a sign of a bigger problem? Can anyone try to execute some of the binaries produced (on riscv or power architectures), to make sure they're not just plain broken?

I'm booting the resulting systemd on a riscv board and it works fine. Could be just not hitting that code path.

@ElvishJerricco
Copy link
Contributor

It's very odd that these log_error_errno macros fail because some of the things to log is null, on one specific architecture.

I also find this so odd that I'm not very happy merging this until it's understood why this is happening.

@skeuchel
Copy link
Contributor

I think this is the corresponding upstream bug report systemd/systemd#30448

@ghost ghost closed this by deleting the head repository Jan 25, 2024
This pull request was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants