Why /dev/kmsg was deleted from cygwin1.dll in git?
Corinna Vinschen
corinna-cygwin@cygwin.com
Fri Jul 6 08:44:00 GMT 2018
On Jul 6 00:29, Takashi Yano wrote:
> Hi Corinna,
>
> On Wed, 4 Jul 2018 16:52:47 +0200
> Corinna Vinschen wrote:
> > Hang on. /dev/kmsg was implemented using a mailslot and it was never
> > accessible via the syslog(3) interface. The code you removed has
> > nothing to do with /dev/kmsg.
>
> First of all, /dev/kmsg was not guilty. The real culprit is the code
> I had removed by the previous patch.
>
> However, the patch I posted was based on mis-understanding regarding
> AF_UNIX implementation. I had checked fhandler_socket_unix.cc and
> thought cygwin AF_UNIX socket is implemented not using AF_INET socket.
> On the other hand, the code, I removed, checks existence of UDP socket
> to determine whether syslogd is activated. So I thought this is no
> longer correct and should be removed.
>
> As a matter of fact, cygwin AF_UNIX socket usually use fhandler_socket_
> local.cc, in which AF_UNIX socket is implemented using AF_INET socket.
> That is, the obove understanding was incorrect.
>
> > What the code does is to check if we have a listener on the /dev/msg UDP
> > socket, otherwise log data may get lost or, IIRC, the syslog call may
> > even hang. So removing this code sounds like a bad idea.
>
> In the case of syslogd is not activated, /dev/log does not exist.
> So connect() results in an error. Therefore log data is directed to
> windows event logging mechanism even without the removed code. In
> usual case, no problem happens. However if syslogd is killed by signal
> 9 or died accidently, /dev/log remains without listener. In this case,
> the problem you mentioned may happen.
>
> > Can you please explain *why* removing this code helps and what happens
> > if syslogd is not running after removing the code?
>
> OK. First, connect_syslogd() tries to connect to syslogd via /dev/log
> which is created by syslogd. However, the code which I removed can not
> perform checking existence of syslogd as expected.
> Previously, get_inet_addr() is used to get name information of the socket
> opened by syslogd. This was working correctly at that time. Currently,
> getsockname() is used instead. This does not return name infomation of
> the socket on syslogd side but returns that of client side. Since no
> listener exists for this socket, it is not listed in the table returned
> by GetUdpTable(). Therefore this check results in false.
>
> As a result, current connect_syslogd() code gives up to connect to syslogd.
>
> To fix this, I made a new patch attached. In this patch, get_inet_addr_local()
> is used instead of getsockname() as in the past.
>
> I will appreciate any comments.
Thanks a lot for the detailed analysis. Patch pushed.
Thanks
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20180706/27fbafa9/attachment.sig>
More information about the Cygwin-patches
mailing list