Hi Michael,

>> So, lets look at the bluetoothd code:
>> 
>>        watchdog_usec = getenv("WATCHDOG_USEC");
>>        seconds = atoi(watchdog_usec) / (1000 * 1000);
>> 
>>        watchdog = g_timeout_add_seconds_full(G_PRIORITY_HIGH,
>>                                        seconds / 2,
>>                                        watchdog_callback,
>>                                        NULL, NULL);
>> 
>> If WATCHDOG_USEC is smaller than 2,000,000 (2s), then "seconds" is <=1
>> and thus "seconds / 2" is 0. Thus, bluetoothd sends watchdog
>> notifications without any timeout.
>> 
>> Two solutions:
>> 1) Don't set such watchdog values for bluetoothd.
>> 2) Fix bluetoothd to use "usec" instead of seconds.
> 
> Thanks for the detailed analysis, David.
> This indeed looks like a bug in bluetooth. Especially since you can
> break bluetooth completely by setting e.g. WatchdogSec=0..

setting WatchdogSec=0 should disable that feature (as described in the 
manpage). Which means that systemd should never give us the environment 
variable WATCHDOG_USEC in the first place. Are you saying that systemd does 
that. In that case that is a systemd bug.

Regards

Marcel

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to