[Devel] all openser processes do not get killed

Daniel-Constantin Mierla daniel at voice-system.ro
Fri May 4 11:07:31 CEST 2007



On 05/04/07 11:51, Klaus Darilion wrote:
>
>
> Daniel-Constantin Mierla wrote:
>> Hello,
>>
>> there are several cases which may get to blocking of openser stop, 
>> but should kill itself after 60sec. That is a define, maybe should be 
>> moved as config parameter.
>>
>> One possibility is caused by syslog -- syslog does synchronized writing, 
>
> I use asynchronous syslog and also have the problem ...
it is an internal lock -- it is recommended not to use syslog() in 
signal handlers. Writing asynchronous seems to be pooling of messages. 
Just google "syslog() deadlock signal handler"

Cheers,
Daniel



>
> regards
> klaus
>
>> if it was writing when the kill is done will get locked by next log 
>> messages in destroy functions. It is hard to avoid it. Other 
>> possibility is from destroy functions, which try to aquire a lock set 
>> when the signal was received. Solution is to do destroy functions in 
>> non-blocking mode.
>>
>> Cheers,
>> Daniel
>>
>>
>> On 05/04/07 02:14, Ovidiu Sas wrote:
>>> Hi Juha,
>>>
>>>
>>> On openser stop, the attendant process will receive the  SIGTERM and
>>> it will dispatch the signal to it's child.  The two hanging processes
>>> are child of a child and are not visible to the dispatcher.
>>>
>>> Compile openser in debug mode, attach to the child with strace (strace
>>> -p PID) and stop openser.  Check if the SIGTERM  signal is propagated
>>> down to the two child and processes and check how the signal is
>>> handled (and combine this information with the output of the debug
>>> log).  Maybe this will reveal why the two processes are still hanging.
>>>
>>>
>>> Hope this helps,
>>> Ovidiu Sas
>>>
>>> On 5/3/07, Juha Heinanen <jh at tutpro.com> wrote:
>>>> Ovidiu Sas writes:
>>>>
>>>>  > Use 'openserctl ps' to identify the processes by pid, stop 
>>>> openser and
>>>>  > then check which process is hanging.
>>>>
>>>> the two remaining ones are:
>>>>
>>>> Process::  ID=0 PID=10478 Type=attendant
>>>> Process::  ID=2 PID=10480 Type=receiver child=0 sock= 
>>>> 192.98.101.10:5090
>>>>
>>>> and the defunc ones are hanging from the latter:
>>>>
>>>> root     10478     1  0 22:25 ?        00:00:00 /usr/sbin/openser
>>>> root     10480 10478  0 22:25 ?        00:00:00  \_ /usr/sbin/openser
>>>> root     10481 10480  0 22:25 ?        00:00:00      \_ [openser] 
>>>> <defunct>
>>>> root     10482 10480  0 22:25 ?        00:00:00      \_ [openser] 
>>>> <defunct>
>>>>
>>>> sometimes init script stop doesn't kill any of the processes, but pid
>>>> file does get removed.
>>>>
>>>> as i said, init script works flawlessly for me if i disable presence.
>>>>
>>>> i know that i can play games with killall, etc., but i would rather 
>>>> like
>>>> to solve this problem, since i don't have any other applications 
>>>> either
>>>> where games are necessary (mysql, radius, etc.).
>>>>
>>>> -- juha
>>>>
>>>
>>> _______________________________________________
>>> Devel mailing list
>>> Devel at openser.org
>>> http://openser.org/cgi-bin/mailman/listinfo/devel
>>>
>>
>> _______________________________________________
>> Devel mailing list
>> Devel at openser.org
>> http://openser.org/cgi-bin/mailman/listinfo/devel
>



More information about the Devel mailing list