commit 5afeaac470002d05abd56e4809bdc7fcc5fd7060
parent 617b996865a2fc692da123a123d4292867dff5d0
Author: Jaromil <jaromil@dyne.org>
Date: Sun, 6 Feb 2011 17:02:28 +0100
substituted the fork with a pthread
fixes a bug in closing tombs from the status tray icon
Diffstat:
1 file changed, 28 insertions(+), 11 deletions(-)
diff --git a/src/tomb-status.c b/src/tomb-status.c
@@ -26,6 +26,8 @@
#include <sys/types.h>
#include <sys/wait.h>
+#include <pthread.h>
+
#include <gtk/gtk.h>
#include <libnotify/notify.h>
@@ -73,6 +75,7 @@ int main(int argc, char **argv) {
snprintf(mapper,255, "%s", argv[1]);
}
+
if(argc<3) sprintf(filename, "unknown");
else snprintf(filename,255, "%s", argv[2]);
@@ -132,6 +135,7 @@ int main(int argc, char **argv) {
notify_uninit();
+
exit(0);
}
@@ -158,29 +162,42 @@ gboolean cb_view(GtkWidget *w, GdkEvent *e) {
return FALSE;
}
if (cpid == 0) { // Child
- execlp("tomb-open", "tomb-open", mountpoint ,(char*)NULL);
+ execlp("tomb-open", "tomb-open", "-q", mountpoint ,(char*)NULL);
exit(1);
}
return TRUE;
}
+void* thread_close(void *arg) {
+ char *map = (char*)arg;
+ execlp("tomb", "tomb", "-q", "close", map, (char*)NULL);
+ return NULL;
+}
+
gboolean cb_close(GtkWidget *w, GdkEvent *e) {
- pid_t cpid = fork();
- int res;
- if (cpid == -1) {
- fprintf(stderr,"error: problem forking process\n");
+ pthread_t thread;
+ pthread_attr_t attr;
+ int *res;
+
+ if(pthread_attr_init (&attr) == -1) {
+ fprintf(stderr, "error initializing POSIX thread attribute\n");
return FALSE;
}
- if (cpid == 0) { // Child
- execlp("tomb", "tomb", "close", mapper, (char*)NULL);
- exit(1);
- }
- waitpid(cpid, &res, 0);
- if(res==0) {
+ pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);
+
+ pthread_create(&thread, &attr, thread_close, mapper);
+
+ pthread_join(thread,(void**)&res);
+
+ if(*res==0) {
+ pthread_attr_destroy(&attr);
gtk_main_quit();
notify_uninit();
exit(0);
}
+
+ pthread_attr_destroy(&attr);
+
return TRUE;
}