It can be both, but the fibril which calls async_manager() is not going to be of any use anymore. It can either linger there or be considered dead. With FIBRIL_FROM_DEAD, the async framework will attempt to free some of the resources.
Jakub Odesláno z iPhonu 16. 6. 2015 v 16:32, Martin Decky <[email protected]>: > Hi, > > I am probably just missing something (still did catch up with the entire > discussion), but this change looks strange to me: > >> === modified file 'uspace/lib/c/include/async.h' >> --- uspace/lib/c/include/async.h 2014-08-26 15:12:12 +0000 >> +++ uspace/lib/c/include/async.h 2015-06-16 14:18:22 +0000 >> @@ -107,7 +107,10 @@ >> extern atomic_t threads_in_ipc_wait; >> >> #define async_manager() \ >> - fibril_switch(FIBRIL_TO_MANAGER) >> + do { \ >> + futex_down(&async_futex); \ >> + fibril_switch(FIBRIL_FROM_DEAD); \ >> + } while (0) >> >> #define async_get_call(data) \ >> async_get_call_timeout(data, 0) > > Particularly the change of the argument from FIBRIL_TO_MANAGER to > FIBRIL_FROM_DEAD. Maybe the behavior is correct, but the semantics of the > argument is not. The macro async_manager() is not called from places where > the fibril is dead. > > > M.D. > > _______________________________________________ > HelenOS-devel mailing list > [email protected] > http://lists.modry.cz/listinfo/helenos-devel _______________________________________________ HelenOS-devel mailing list [email protected] http://lists.modry.cz/listinfo/helenos-devel
