[PATCH] [RFC] Enable systemd socket activation

Łukasz Stelmach l.stelmach at samsung.com
Mon Jul 1 01:35:08 PDT 2013


It was <2013-06-28 pią 10:52>, when walter harms wrote:
> Am 28.06.2013 10:02, schrieb Łukasz Stelmach:
>> It was <2013-06-28 pią 07:32>, when Peter Hutterer wrote:
>>> On Wed, Jun 26, 2013 at 06:18:04PM +0200, Łukasz Stelmach wrote:
>>>> Receive file descriptors of open sockets from systemd instead of
>>>> creating them.
>>>>
>>>> Signed-off-by: Łukasz Stelmach <l.stelmach at samsung.com>
>>>> ---
>>>>  Xtrans.c |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
>>>>  1 file changed, 50 insertions(+)
>>>>
>>>> diff --git a/Xtrans.c b/Xtrans.c
>>>> index 0799f04..a96e901 100644
>>>> --- a/Xtrans.c
>>>> +++ b/Xtrans.c

[...]

>>>> +    {
>>>> +	for (i = 0; i < systemd_listen_fds; i++)
>>>> +	{
>>>> +	    struct sockaddr_storage a;
>>>> +	    int ti;
>>>> +	    socklen_t al;
>>>> +
>>>> +	    al = sizeof(a);
>>>> +	    if (getsockname(i + SD_LISTEN_FDS_START, (struct sockaddr*)&a, &al) < 0)
>>>> +		return -1;
>>>> +
>>>> +	    switch (a.ss_family)
>>>> +	    {
>>>> +	    case AF_UNIX:
>>>> +		ti = TRANS_SOCKET_UNIX_INDEX;
>>>> +		break;
>>>> +	    case AF_INET:
>>>> +		ti = TRANS_SOCKET_INET_INDEX;
>>>> +		break;
>>>> +#if defined(IPv6) && defined(AF_INET6)
>>>> +	    case AF_INET6:
>>>> +		ti = TRANS_SOCKET_INET6_INDEX;
>>>> +		break;
>>>> +#endif /* IPv6 */
>>>> +	    default:
>>>> +		return -1;
>>>> +	    }
>>>> +
>>>> +	    if ((ciptr = TRANS(ReopenCOTSServer(ti, i + SD_LISTEN_FDS_START,
>>>> +						getenv("DISPLAY"))))==NULL)
>>>> + fprintf(stderr, "Got NULL while trying to Reopen socket received
>>>> from systemd.\n");
>>>
>>> lowercase 'reopen'
>> 
>> Fixed.
>> 
>>> (don't have the brain capacity to do a proper review atm, sorry)
>> 
>> Thak you for your comments. I will send v2 when I get some more.
>
>
> These if-statement if very complex. You should revamp it and make at least 2 statements
> like:
> ciptr = TRANS(ReopenCOTSServer(ti, i + SD_LISTEN_FDS_START,getenv("DISPLAY"));
> if (ciptr == NULL )

This is exactly the same way lauchd is handeled right before the place
this patch is applied[1]. Should I fix that too?

> btw: can getenv() fail ?

Yes, and a NULL is returned. However TRANS(ReopenCOTSServer)[2]
(actually it is TRANS(Reopen)[3][4]) returns NULL in such case. This way
failing getenv() is also covered.

[1] http://cgit.freedesktop.org/xorg/lib/libxtrans/tree/Xtrans.c?id=bd53f4c8543faf910a7a151241ee07661b4d57ad#n1036
[2] http://cgit.freedesktop.org/xorg/lib/libxtrans/tree/Xtrans.c?id=bd53f4c8543faf910a7a151241ee07661b4d57ad#n612
[3] http://cgit.freedesktop.org/xorg/lib/libxtrans/tree/Xtrans.c?id=bd53f4c8543faf910a7a151241ee07661b4d57ad#n486
[4] http://cgit.freedesktop.org/xorg/lib/libxtrans/tree/Xtrans.c?id=bd53f4c8543faf910a7a151241ee07661b4d57ad#n518

-- 
Łukasz Stelmach
Samsung R&D Institute Poland
Samsung Electronics



More information about the xorg-devel mailing list