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

Reply via email to