Changeset 111850c
- Timestamp:
- Mar 25, 2011, 3:55:41 AM (14 years ago)
- Children:
- 25f7c57
- Parents:
- 6eaafb0
- git-author:
- David Benjamin <davidben@mit.edu> (03/02/11 13:47:21)
- git-committer:
- David Benjamin <davidben@mit.edu> (03/25/11 03:55:41)
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
owl.c
r6eaafb0 r111850c 365 365 } 366 366 367 static gboolean sig_handler_main_thread(gpointerdata) {367 static void sig_handler_main_thread(void *data) { 368 368 int sig = GPOINTER_TO_INT(data); 369 369 … … 378 378 owl_process_input_char(in); 379 379 } 380 return FALSE;381 380 } 382 381 383 382 static void sig_handler(int sig, void *data) { 384 GMainContext *context = data;385 GSource *source;386 387 383 /* If it was an interrupt, set a flag so we can handle it earlier if 388 384 * needbe. sig_handler_main_thread will check the flag to make sure … … 392 388 } 393 389 /* Send a message to the main thread. */ 394 source = g_idle_source_new(); 395 g_source_set_priority(source, G_PRIORITY_DEFAULT); 396 g_source_set_callback(source, sig_handler_main_thread, 397 GINT_TO_POINTER(sig), NULL); 398 g_source_attach(source, context); 399 g_source_unref(source); 390 owl_select_post_task(sig_handler_main_thread, GINT_TO_POINTER(sig), NULL); 400 391 } 401 392 … … 436 427 CHECK_RESULT("sigaddset", sigaddset(&sigset, SIGHUP)); 437 428 CHECK_RESULT("sigaddset", sigaddset(&sigset, SIGINT)); 438 owl_signal_init(&sigset, sig_handler, g_main_context_default());429 owl_signal_init(&sigset, sig_handler, NULL); 439 430 } 440 431 -
select.c
r567de81 r111850c 2 2 3 3 static GMainLoop *loop = NULL; 4 static GMainContext *context; 4 5 static int dispatch_active = 0; 5 6 … … 310 311 void owl_select_run_loop(void) 311 312 { 312 loop = g_main_loop_new(NULL, FALSE); 313 context = g_main_context_default(); 314 loop = g_main_loop_new(context, FALSE); 313 315 g_main_loop_run(loop); 314 316 } … … 321 323 } 322 324 } 325 326 typedef struct _owl_task { /*noproto*/ 327 void (*cb)(void *); 328 void *cbdata; 329 void (*destroy_cbdata)(void *); 330 } owl_task; 331 332 static gboolean _run_task(gpointer data) 333 { 334 owl_task *t = data; 335 if (t->cb) 336 t->cb(t->cbdata); 337 return FALSE; 338 } 339 340 static void _destroy_task(void *data) 341 { 342 owl_task *t = data; 343 if (t->destroy_cbdata) 344 t->destroy_cbdata(t->cbdata); 345 g_free(t); 346 } 347 348 void owl_select_post_task(void (*cb)(void*), void *cbdata, void (*destroy_cbdata)(void*)) 349 { 350 GSource *source = g_idle_source_new(); 351 owl_task *t = g_new0(owl_task, 1); 352 t->cb = cb; 353 t->cbdata = cbdata; 354 t->destroy_cbdata = destroy_cbdata; 355 g_source_set_priority(source, G_PRIORITY_DEFAULT); 356 g_source_set_callback(source, _run_task, t, _destroy_task); 357 g_source_attach(source, context); 358 g_source_unref(source); 359 }
Note: See TracChangeset
for help on using the changeset viewer.