summaryrefslogtreecommitdiff
path: root/cleopatre
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre')
-rw-r--r--cleopatre/application/libspid/src/system.c11
-rw-r--r--cleopatre/devkit/tests/libspid/utests/src/system_utests.c22
2 files changed, 28 insertions, 5 deletions
diff --git a/cleopatre/application/libspid/src/system.c b/cleopatre/application/libspid/src/system.c
index dcc40fb52c..ee5752bffa 100644
--- a/cleopatre/application/libspid/src/system.c
+++ b/cleopatre/application/libspid/src/system.c
@@ -815,8 +815,6 @@ libspid_system_file_update_is_registered (pid_t rx_pid, const char *filename,
* - LIBSPID_ERROR_PARAM if bad input parameters
* - LIBSPID_ERROR_SYSTEM if system error, see errno set by kill() system call:
* - EPERM in case of authorization constraints
- * - ESRCH if pid not found
- * - EINVAL if signal_nb < 0 or signal_nb >= NSIG
* - error from libspid_config_read_line()
*/
libspid_error_t
@@ -867,11 +865,14 @@ libspid_system_file_update_warn (pid_t tx_pid, const char *filename)
/* Check that rx_pid is different from the calling process.
* Note that if input tx_pid = 0, the calling process will also receive the signal. */
if ((0 != (rx_pid = atoi (elt[i])))
- && (tx_pid != rx_pid)
- && (0 != kill (rx_pid, SIGHUP)))
+ && (tx_pid != rx_pid))
{
- return LIBSPID_ERROR_SYSTEM;
+ if (kill (rx_pid, SIGHUP) != 0 && errno != ESRCH)
+ {
+ return LIBSPID_ERROR_SYSTEM;
+ }
}
+
}
return LIBSPID_SUCCESS;
diff --git a/cleopatre/devkit/tests/libspid/utests/src/system_utests.c b/cleopatre/devkit/tests/libspid/utests/src/system_utests.c
index 8d6fddc40f..ffba274382 100644
--- a/cleopatre/devkit/tests/libspid/utests/src/system_utests.c
+++ b/cleopatre/devkit/tests/libspid/utests/src/system_utests.c
@@ -24,6 +24,7 @@
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include <sys/wait.h>
#include <dirent.h>
#include <sys/stat.h>
@@ -689,8 +690,29 @@ START_TEST (test_libspid_system_file_update_warn)
fail_if (LIBSPID_SUCCESS != libspid_system_file_update_is_registered (getpid(),
filename, &is_registered));
fail_if (LIBSPID_TRUE != is_registered);
+ fail_if (LIBSPID_SUCCESS != libspid_system_file_update_warn (getpid(), filename));
+ fail_if (handler_called);
fail_if (LIBSPID_SUCCESS != libspid_system_file_update_warn (tx_pid, filename));
fail_if (!handler_called);
+ fail_if (LIBSPID_SUCCESS != libspid_system_file_update_unregister (getpid(), filename));
+ handler_called = 0;
+
+ /* Test with a registered process that no longer exists. */
+ pid_t child_pid = fork ();
+ fail_if (child_pid == -1);
+ if (child_pid)
+ {
+ fail_if (waitpid (child_pid, NULL, 0) != child_pid);
+ fail_if (LIBSPID_SUCCESS != libspid_system_file_update_register (child_pid, filename,
+ callback));
+ fail_if (LIBSPID_SUCCESS != libspid_system_file_update_warn (tx_pid, filename));
+ fail_if (handler_called);
+ fail_if (LIBSPID_SUCCESS != libspid_system_file_update_unregister (child_pid, filename));
+ }
+ else
+ {
+ exit (0);
+ }
}
END_TEST