vchanneld

Michael Trimarchi trimarchi at gandalf.sssup.it
Fri Feb 13 15:05:06 CET 2009


Hi,

Sean McNeil wrote:
> Michael Trimarchi wrote:
>> Hi,
>>
>> Sean McNeil wrote:
>>> Michael Trimarchi wrote:
>>>> Hi,
>>>>
>>>> Sean McNeil wrote:
>>>>>
>>>>> Michael Trimarchi wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Sean McNeil wrote:
>>>>>>> Hi Michael,
>>>>>>>
>>>>>>> This is a very bad idea for several reasons:
>>>>>>>
>>>>>>> 1) You cannot guarantee which pts you get.
>>>>>> Yes I can, it is just a script property.
>>>>>
>>>>> No you can't. You do not know that something else is using pts or 
>>>>> not. You cannot guarantee that you will get /dev/pts/0 when you 
>>>>> first open /dev/ptmx. Also there is a startup race condition. You 
>>>>> have to know that the mux daemon is up and has allocated the pts 
>>>>> before you can possibly pass it to the rild. The OM stack uses 
>>>>> dbus to get around that. The pts isn't allocated until needed and 
>>>>> then the actual device is passed back. It doesn't sound like you 
>>>>> are doing that and rild isn't setup to use dbus. If you bundle it 
>>>>> into a script you still have possible race conditions. Plus if the 
>>>>> script dies, then you need to make sure processes are not still 
>>>>> around (mux and ril) before you try to start up again. It just 
>>>>> makes things a lot more complicated when it doesn't need to be.
>>>> This is can be done by a property setting
>>>>
>>>> on property:vchanneld.status=start
>>>>    start ril-daemon
>>>>
>>>> You can give the serial device to the rild setting property.
>>>
>>> Again, no. You cannot guarantee that the property will be set before 
>>> the rild gets started. This is a race condition. Also, when/if the 
>>> rild aborts then the pts will no longer be available as it gets 
>>> closed. You'll never be able to talk to the modem again.
>>>
>>>
>> The rild start disable. The vchanneld start and initialize the pts, 
>> then it prepare the rild
>> enviroment and set its status to start. The init process take the 
>> enviroment variable and see that
>> it's change and start the rild. The rild open the pseudo terminal and 
>> it has no problem.
>
> Init starts your mux. The mux starts and gets interrupted. init knows 
> mux is up and starts rild. mux hasn't set property yet. rild runs and 
> looks at property which isn't set. This is a race condition. Doesn't 
> always happen like that but it can. You cannot control it with the 
> status. That property isn't set by your mux. It is set by init. 
 asprintf(&cmd, "-d %s", vch[1]->ptsname);
 property_set("rild.libargs", cmd);
 property_set(PROPERTY_VCHANNEL_STATUS, "start");
 free(cmd);

I don't think so. The property that you refer is the starting and it is 
set by the init. You can
trigger any process.

Michael




More information about the openmoko-kernel mailing list