mirror of
https://github.com/SELinuxProject/selinux
synced 2025-04-28 13:48:17 +00:00
Handle cleanup of locks properly
This commit is contained in:
parent
53ccfb3b4d
commit
f2051b20fa
@ -54,6 +54,7 @@ static const char *PATH="/org/selinux/Restorecond";
|
|||||||
static const char *INTERFACE="org.selinux.RestorecondIface";
|
static const char *INTERFACE="org.selinux.RestorecondIface";
|
||||||
static const char *RULE="type='signal',interface='org.selinux.RestorecondIface'";
|
static const char *RULE="type='signal',interface='org.selinux.RestorecondIface'";
|
||||||
|
|
||||||
|
static int local_lock_fd = -1;
|
||||||
|
|
||||||
static DBusHandlerResult
|
static DBusHandlerResult
|
||||||
signal_filter (DBusConnection *connection __attribute__ ((__unused__)), DBusMessage *message, void *user_data)
|
signal_filter (DBusConnection *connection __attribute__ ((__unused__)), DBusMessage *message, void *user_data)
|
||||||
@ -201,17 +202,18 @@ static int local_server() {
|
|||||||
perror("asprintf");
|
perror("asprintf");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
int fd = open(ptr, O_CREAT | O_WRONLY | O_NOFOLLOW | O_CLOEXEC, S_IRUSR | S_IWUSR);
|
local_lock_fd = open(ptr, O_CREAT | O_WRONLY | O_NOFOLLOW | O_CLOEXEC, S_IRUSR | S_IWUSR);
|
||||||
if (debug_mode)
|
if (debug_mode)
|
||||||
g_warning ("Lock file: %s", ptr);
|
g_warning ("Lock file: %s", ptr);
|
||||||
|
|
||||||
free(ptr);
|
free(ptr);
|
||||||
if (fd < 0) {
|
if (local_lock_fd < 0) {
|
||||||
if (debug_mode)
|
if (debug_mode)
|
||||||
perror("open");
|
perror("open");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (flock(fd, LOCK_EX | LOCK_NB) < 0) {
|
if (flock(local_lock_fd, LOCK_EX | LOCK_NB) < 0) {
|
||||||
|
close(local_lock_fd);
|
||||||
if (debug_mode)
|
if (debug_mode)
|
||||||
perror("flock");
|
perror("flock");
|
||||||
return -1;
|
return -1;
|
||||||
@ -226,6 +228,12 @@ static int local_server() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void end_local_server(void) {
|
||||||
|
if (local_lock_fd >= 0)
|
||||||
|
close(local_lock_fd);
|
||||||
|
local_lock_fd = -1;
|
||||||
|
}
|
||||||
|
|
||||||
int server(int master_fd, const char *watch_file) {
|
int server(int master_fd, const char *watch_file) {
|
||||||
GMainLoop *loop;
|
GMainLoop *loop;
|
||||||
|
|
||||||
@ -253,6 +261,7 @@ int server(int master_fd, const char *watch_file) {
|
|||||||
g_main_loop_run (loop);
|
g_main_loop_run (loop);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
end_local_server();
|
||||||
g_main_loop_unref (loop);
|
g_main_loop_unref (loop);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user