Rev 2534 | Rev 2569 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2534 | Rev 2568 | ||
|---|---|---|---|
| Line 360... | Line 360... | ||
| 360 | * Note: the current fibril will be rescheduled either due to a |
360 | * Note: the current fibril will be rescheduled either due to a |
| 361 | * timeout or due to an arriving message destined to it. In the |
361 | * timeout or due to an arriving message destined to it. In the |
| 362 | * former case, handle_expired_timeouts() and, in the latter |
362 | * former case, handle_expired_timeouts() and, in the latter |
| 363 | * case, route_call() will perform the wakeup. |
363 | * case, route_call() will perform the wakeup. |
| 364 | */ |
364 | */ |
| 365 | fibril_schedule_next_adv(FIBRIL_TO_MANAGER); |
365 | fibril_switch(FIBRIL_TO_MANAGER); |
| 366 | /* |
366 | /* |
| 367 | * Futex is up after getting back from async_manager get it |
367 | * Futex is up after getting back from async_manager get it |
| 368 | * again. |
368 | * again. |
| 369 | */ |
369 | */ |
| 370 | futex_down(&async_futex); |
370 | futex_down(&async_futex); |
| Line 582... | Line 582... | ||
| 582 | int timeout; |
582 | int timeout; |
| 583 | awaiter_t *waiter; |
583 | awaiter_t *waiter; |
| 584 | struct timeval tv; |
584 | struct timeval tv; |
| 585 | 585 | ||
| 586 | while (1) { |
586 | while (1) { |
| 587 | if (fibril_schedule_next_adv(FIBRIL_FROM_MANAGER)) { |
587 | if (fibril_switch(FIBRIL_FROM_MANAGER)) { |
| 588 | futex_up(&async_futex); |
588 | futex_up(&async_futex); |
| 589 | /* |
589 | /* |
| 590 | * async_futex is always held when entering a manager |
590 | * async_futex is always held when entering a manager |
| 591 | * fibril. |
591 | * fibril. |
| 592 | */ |
592 | */ |
| Line 801... | Line 801... | ||
| 801 | 801 | ||
| 802 | msg->wdata.fid = fibril_get_id(); |
802 | msg->wdata.fid = fibril_get_id(); |
| 803 | msg->wdata.active = 0; |
803 | msg->wdata.active = 0; |
| 804 | msg->wdata.inlist = 0; |
804 | msg->wdata.inlist = 0; |
| 805 | /* Leave the async_futex locked when entering this function */ |
805 | /* Leave the async_futex locked when entering this function */ |
| 806 | fibril_schedule_next_adv(FIBRIL_TO_MANAGER); |
806 | fibril_switch(FIBRIL_TO_MANAGER); |
| 807 | /* futex is up automatically after fibril_schedule_next...*/ |
807 | /* futex is up automatically after fibril_switch...*/ |
| 808 | done: |
808 | done: |
| 809 | if (retval) |
809 | if (retval) |
| 810 | *retval = msg->retval; |
810 | *retval = msg->retval; |
| 811 | free(msg); |
811 | free(msg); |
| 812 | } |
812 | } |
| Line 840... | Line 840... | ||
| 840 | msg->wdata.fid = fibril_get_id(); |
840 | msg->wdata.fid = fibril_get_id(); |
| 841 | msg->wdata.active = 0; |
841 | msg->wdata.active = 0; |
| 842 | insert_timeout(&msg->wdata); |
842 | insert_timeout(&msg->wdata); |
| 843 | 843 | ||
| 844 | /* Leave the async_futex locked when entering this function */ |
844 | /* Leave the async_futex locked when entering this function */ |
| 845 | fibril_schedule_next_adv(FIBRIL_TO_MANAGER); |
845 | fibril_switch(FIBRIL_TO_MANAGER); |
| 846 | /* futex is up automatically after fibril_schedule_next...*/ |
846 | /* futex is up automatically after fibril_switch...*/ |
| 847 | 847 | ||
| 848 | if (!msg->done) |
848 | if (!msg->done) |
| 849 | return ETIMEOUT; |
849 | return ETIMEOUT; |
| 850 | 850 | ||
| 851 | done: |
851 | done: |
| Line 882... | Line 882... | ||
| 882 | tv_add(&msg->wdata.expires, timeout); |
882 | tv_add(&msg->wdata.expires, timeout); |
| 883 | 883 | ||
| 884 | futex_down(&async_futex); |
884 | futex_down(&async_futex); |
| 885 | insert_timeout(&msg->wdata); |
885 | insert_timeout(&msg->wdata); |
| 886 | /* Leave the async_futex locked when entering this function */ |
886 | /* Leave the async_futex locked when entering this function */ |
| 887 | fibril_schedule_next_adv(FIBRIL_TO_MANAGER); |
887 | fibril_switch(FIBRIL_TO_MANAGER); |
| 888 | /* futex is up automatically after fibril_schedule_next_adv()...*/ |
888 | /* futex is up automatically after fibril_switch()...*/ |
| 889 | free(msg); |
889 | free(msg); |
| 890 | } |
890 | } |
| 891 | 891 | ||
| 892 | /** Setter for client_connection function pointer. |
892 | /** Setter for client_connection function pointer. |
| 893 | * |
893 | * |