chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
unit: fix the race in deserialization.
[elogind.git]
/
src
/
shared
/
exit-status.c
diff --git
a/src/shared/exit-status.c
b/src/shared/exit-status.c
index b07a66a3e2dac5b3e2f1e263e2e0f68d1a5c8a54..45131f2b2af96054778bac3fc8024c3274c87b5a 100644
(file)
--- a/
src/shared/exit-status.c
+++ b/
src/shared/exit-status.c
@@
-23,6
+23,8
@@
#include <sys/wait.h>
#include "exit-status.h"
#include <sys/wait.h>
#include "exit-status.h"
+#include "set.h"
+#include "macro.h"
const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) {
const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) {
@@
-122,6
+124,12
@@
const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) {
case EXIT_NAMESPACE:
return "NAMESPACE";
case EXIT_NAMESPACE:
return "NAMESPACE";
+
+ case EXIT_NO_NEW_PRIVILEGES:
+ return "NO_NEW_PRIVILEGES";
+
+ case EXIT_SECCOMP:
+ return "SECCOMP";
}
}
}
}
@@
-152,10
+160,12
@@
const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) {
}
}
-bool is_clean_exit(int code, int status) {
+bool is_clean_exit(int code, int status
, ExitStatusSet *success_status
) {
if (code == CLD_EXITED)
if (code == CLD_EXITED)
- return status == 0;
+ return status == 0 ||
+ (success_status &&
+ set_contains(success_status->code, INT_TO_PTR(status)));
/* If a daemon does not implement handlers for some of the
* signals that's not considered an unclean shutdown */
/* If a daemon does not implement handlers for some of the
* signals that's not considered an unclean shutdown */
@@
-164,14
+174,16
@@
bool is_clean_exit(int code, int status) {
status == SIGHUP ||
status == SIGINT ||
status == SIGTERM ||
status == SIGHUP ||
status == SIGINT ||
status == SIGTERM ||
- status == SIGPIPE;
+ status == SIGPIPE ||
+ (success_status &&
+ set_contains(success_status->signal, INT_TO_PTR(status)));
return false;
}
return false;
}
-bool is_clean_exit_lsb(int code, int status) {
+bool is_clean_exit_lsb(int code, int status
, ExitStatusSet *success_status
) {
- if (is_clean_exit(code, status))
+ if (is_clean_exit(code, status
, success_status
))
return true;
return
return true;
return