- Timestamp:
- May 23, 2011, 8:57:46 PM (13 years ago)
- Branches:
- master, release-1.10, release-1.8, release-1.9
- Children:
- 117b2ba
- Parents:
- 08e9842
- git-author:
- David Benjamin <davidben@mit.edu> (02/26/11 16:32:51)
- git-committer:
- David Benjamin <davidben@mit.edu> (05/23/11 20:57:46)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
select.c
r257b9c4 rdc1edbd 296 296 } 297 297 298 int owl_select_aim_hack(fd_set *rfds, fd_set *wfds)299 {300 aim_conn_t *cur;301 aim_session_t *sess;302 int max_fd;303 304 max_fd = 0;305 sess = owl_global_get_aimsess(&g);306 for (cur = sess->connlist; cur; cur = cur->next) {307 if (cur->fd != -1) {308 FD_SET(cur->fd, rfds);309 if (cur->status & AIM_CONN_STATUS_INPROGRESS) {310 /* Yes, we're checking writable sockets here. Without it, AIM311 login is really slow. */312 FD_SET(cur->fd, wfds);313 }314 315 if (cur->fd > max_fd)316 max_fd = cur->fd;317 }318 }319 return max_fd;320 }321 322 298 void owl_process_input_char(owl_input j) 323 299 { … … 331 307 } 332 308 333 #if 0334 /* FIXME: Reimplement the AIM hack and handle AIM events. */335 void owl_select(void)336 {337 int i, max_fd, max_fd2, aim_done, ret;338 fd_set r;339 fd_set w;340 fd_set e;341 fd_set aim_rfds, aim_wfds;342 struct timespec timeout;343 sigset_t mask;344 345 owl_select_process_timers(&timeout);346 347 owl_select_mask_signals(&mask);348 349 if(owl_global_is_interrupted(&g)) {350 owl_select_handle_intr(&mask);351 return;352 }353 FD_ZERO(&r);354 FD_ZERO(&w);355 FD_ZERO(&e);356 357 max_fd = owl_select_prepare_io_dispatch_fd_sets(&r, &w, &e);358 359 /* AIM HACK:360 *361 * The problem - I'm not sure where to hook into the owl/faim362 * interface to keep track of when the AIM socket(s) open and363 * close. In particular, the bosconn thing throws me off. So,364 * rather than register particular dispatchers for AIM, I look up365 * the relevant FDs and add them to select's watch lists, then366 * check for them individually before moving on to the other367 * dispatchers. --asedeno368 */369 aim_done = 1;370 FD_ZERO(&aim_rfds);371 FD_ZERO(&aim_wfds);372 if (owl_global_is_doaimevents(&g)) {373 aim_done = 0;374 max_fd2 = owl_select_aim_hack(&aim_rfds, &aim_wfds);375 if (max_fd < max_fd2) max_fd = max_fd2;376 for(i = 0; i <= max_fd2; i++) {377 if (FD_ISSET(i, &aim_rfds)) {378 FD_SET(i, &r);379 FD_SET(i, &e);380 }381 if (FD_ISSET(i, &aim_wfds)) {382 FD_SET(i, &w);383 FD_SET(i, &e);384 }385 }386 }387 /* END AIM HACK */388 389 if (owl_select_do_pre_select_actions()) {390 timeout.tv_sec = 0;391 timeout.tv_nsec = 0;392 }393 394 ret = pselect(max_fd+1, &r, &w, &e, &timeout, &mask);395 396 if(ret < 0 && errno == EINTR) {397 if(owl_global_is_interrupted(&g)) {398 owl_select_handle_intr(NULL);399 }400 sigprocmask(SIG_SETMASK, &mask, NULL);401 return;402 }403 404 sigprocmask(SIG_SETMASK, &mask, NULL);405 406 if(ret > 0) {407 /* AIM HACK: process all AIM events at once. */408 for(i = 0; !aim_done && i <= max_fd; i++) {409 if (FD_ISSET(i, &r) || FD_ISSET(i, &w) || FD_ISSET(i, &e)) {410 if (FD_ISSET(i, &aim_rfds) || FD_ISSET(i, &aim_wfds)) {411 owl_process_aim();412 aim_done = 1;413 }414 }415 }416 owl_select_io_dispatch(&r, &w, &e, max_fd);417 }418 }419 #endif420 421 309 void owl_select_init(void) 422 310 {
Note: See TracChangeset
for help on using the changeset viewer.