- Timestamp:
- May 23, 2011, 9:09:44 PM (12 years ago)
- Branches:
- master, release-1.8, release-1.9
- Children:
- 33b6431b
- Parents:
- 4c7c21f (diff), 1d21d9f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
zephyr.c
r3b8a563 rf97c1a6 7 7 #include "owl.h" 8 8 9 static GSource *owl_zephyr_event_source_new(int fd); 10 11 static gboolean owl_zephyr_event_prepare(GSource *source, int *timeout); 12 static gboolean owl_zephyr_event_check(GSource *source); 13 static gboolean owl_zephyr_event_dispatch(GSource *source, GSourceFunc callback, gpointer user_data); 14 9 15 #ifdef HAVE_LIBZEPHYR 10 16 static GList *deferred_subs = NULL; … … 16 22 17 23 Code_t ZResetAuthentication(void); 24 25 static GSourceFuncs zephyr_event_funcs = { 26 owl_zephyr_event_prepare, 27 owl_zephyr_event_check, 28 owl_zephyr_event_dispatch, 29 NULL 30 }; 18 31 #endif 19 32 … … 84 97 Code_t code; 85 98 char *perl; 99 GSource *event_source; 86 100 87 101 owl_select_remove_io_dispatch(d); … … 99 113 } 100 114 101 owl_select_add_io_dispatch(ZGetFD(), OWL_IO_READ|OWL_IO_EXCEPT, &owl_zephyr_process_events, NULL, NULL); 115 event_source = owl_zephyr_event_source_new(ZGetFD()); 116 g_source_attach(event_source, NULL); 117 g_source_unref(event_source); 102 118 103 119 owl_global_set_havezephyr(&g); … … 127 143 perl = owl_perlconfig_execute("BarnOwl::Zephyr::_zephyr_startup()"); 128 144 g_free(perl); 129 130 owl_select_add_pre_select_action(owl_zephyr_pre_select_action, NULL, NULL);131 145 } 132 146 … … 180 194 if((code = ZPending()) < 0) { 181 195 owl_function_debugmsg("Error (%s) in ZPending()\n", 196 error_message(code)); 197 return 0; 198 } 199 return code; 200 } 201 #endif 202 return 0; 203 } 204 205 int owl_zephyr_zqlength(void) 206 { 207 #ifdef HAVE_LIBZEPHYR 208 Code_t code; 209 if(owl_global_is_havezephyr(&g)) { 210 if((code = ZQLength()) < 0) { 211 owl_function_debugmsg("Error (%s) in ZQLength()\n", 182 212 error_message(code)); 183 213 return 0; … … 1469 1499 } 1470 1500 1471 void owl_zephyr_process_events(const owl_io_dispatch *d, void *data) 1472 { 1501 typedef struct { /*noproto*/ 1502 GSource source; 1503 GPollFD poll_fd; 1504 } owl_zephyr_event_source; 1505 1506 static GSource *owl_zephyr_event_source_new(int fd) { 1507 GSource *source; 1508 owl_zephyr_event_source *event_source; 1509 1510 source = g_source_new(&zephyr_event_funcs, sizeof(owl_zephyr_event_source)); 1511 event_source = (owl_zephyr_event_source*) source; 1512 event_source->poll_fd.fd = fd; 1513 event_source->poll_fd.events = G_IO_IN | G_IO_HUP | G_IO_PRI | G_IO_ERR; 1514 g_source_add_poll(source, &event_source->poll_fd); 1515 1516 return source; 1517 } 1518 1519 static gboolean owl_zephyr_event_prepare(GSource *source, int *timeout) { 1520 *timeout = -1; 1521 return owl_zephyr_zqlength() > 0; 1522 } 1523 1524 static gboolean owl_zephyr_event_check(GSource *source) { 1525 owl_zephyr_event_source *event_source = (owl_zephyr_event_source*)source; 1526 if (event_source->poll_fd.revents & event_source->poll_fd.events) 1527 return owl_zephyr_zpending() > 0; 1528 return FALSE; 1529 } 1530 1531 static gboolean owl_zephyr_event_dispatch(GSource *source, GSourceFunc callback, gpointer user_data) { 1473 1532 _owl_zephyr_process_events(); 1474 } 1475 1476 int owl_zephyr_pre_select_action(owl_ps_action *a, void *p) 1477 { 1478 return _owl_zephyr_process_events(); 1479 } 1533 return TRUE; 1534 }
Note: See TracChangeset
for help on using the changeset viewer.