aboutsummaryrefslogtreecommitdiff
path: root/src/core/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/main.c')
-rw-r--r--src/core/main.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/core/main.c b/src/core/main.c
index f4185df7..977e041e 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -88,9 +88,20 @@ static int parseOptions(int argc,
88 return OK; 88 return OK;
89} 89}
90 90
91static void * shutdownCode(void * arg) {
92 Semaphore * sig = arg;
93 stopCron();
94 doneGNUnetGTKCommon();
95 SEMAPHORE_UP(sig);
96 return NULL;
97}
98
91int main(int argc, 99int main(int argc,
92 char *argv[]) { 100 char *argv[]) {
93 GtkWidget * root; 101 GtkWidget * root;
102 PTHREAD_T doneThread;
103 Semaphore * sig;
104 void * unused;
94 105
95 g_thread_init(NULL); 106 g_thread_init(NULL);
96 gtk_init(&argc, &argv); 107 gtk_init(&argc, &argv);
@@ -122,10 +133,18 @@ int main(int argc,
122 gtk_main(); 133 gtk_main();
123 gdk_threads_leave(); 134 gdk_threads_leave();
124 setCustomLogProc(NULL); 135 setCustomLogProc(NULL);
125 while (YES == gtkRunSomeSaveCalls()) ;
126 stopCron();
127 136
128 doneGNUnetGTKCommon(); 137 sig = SEMAPHORE_NEW(0);
138 if (0 != PTHREAD_CREATE(&doneThread,
139 &shutdownCode,
140 sig,
141 64*1024))
142 DIE_STRERROR("pthread_create");
143 while (OK != SEMAPHORE_DOWN_NONBLOCKING(sig))
144 gtkRunSomeSaveCalls();
145 PTHREAD_JOIN(&doneThread,
146 &unused);
147 SEMAPHORE_FREE(sig);
129 doneUtil(); 148 doneUtil();
130 149
131 return 0; 150 return 0;