[make-initrd] [PATCH 1/3] Reimplement ueventd

Alexey Gladkov gladkov.alexey at gmail.com
Fri May 5 20:02:40 MSK 2023


On Fri, May 05, 2023 at 06:08:25AM +0300, Leonid Krivoshein wrote:
> 
> On 5/4/23 16:42, Alexey Gladkov wrote:
> > [...]
> > diff --git a/datasrc/ueventd/logging.c b/datasrc/ueventd/logging.c
> > new file mode 100644
> > index 00000000..671f6814
> > --- /dev/null
> > +++ b/datasrc/ueventd/logging.c
> > @@ -0,0 +1,63 @@
> > +/* SPDX-License-Identifier: GPL-2.0-or-later */
> > +
> > +#include <stdio.h>
> > +#include <stdarg.h>
> > +#include <strings.h>
> > +#include <errno.h>
> > +#include <time.h>
> > +
> > +#include "ueventd.h"
> > +
> > +#define default_logfile "/var/log/ueventd.log"
> > +
> > +int log_priority = LOG_INFO;
> > +
> > [...]
> > +void message(int priority, const char *fmt, ...)
> > +{
> > +	va_list ap;
> > +	va_start(ap, fmt);
> > +	if (priority <= log_priority) {
> > +		time_t ts = time(NULL);
> > +		struct tm *t = localtime(&ts);
> > +		fprintf(stderr, "[%04d-%02d-%02d %02d:%02d:%02d] %s: ",
> > +		        t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
> > +		        t->tm_hour, t->tm_min, t->tm_sec,
> > +		        program_invocation_short_name);
> 
> Кажется, есть риск спутать сообщения от разных потоков, тут должен быть 
> целостный буферизированный вывод через snprintf(). Мой комментарий как 
> раз в месте потенциального разрыва. Если журналирование выстраивается в 
> один поток выполнения, проблемы нет.

Ты абсолютно прав. Тут вообще всё нужно делать иначе. Это нужно делать
через writev например.

> > +		vfprintf(stderr, fmt, ap);
> > +		fprintf(stderr, "\n");
> > +	}
> > +	va_end(ap);
> > +}
> > [...]
> 
> 
> -- 
> WBR, Leonid Krivoshein.
> _______________________________________________
> Make-initrd mailing list
> Make-initrd at lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/make-initrd

-- 
Rgrds, legion



More information about the Make-initrd mailing list