diff options
Diffstat (limited to 'src/core/main.c')
-rw-r--r-- | src/core/main.c | 25 |
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 | ||
91 | static void * shutdownCode(void * arg) { | ||
92 | Semaphore * sig = arg; | ||
93 | stopCron(); | ||
94 | doneGNUnetGTKCommon(); | ||
95 | SEMAPHORE_UP(sig); | ||
96 | return NULL; | ||
97 | } | ||
98 | |||
91 | int main(int argc, | 99 | int 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; |