[make-initrd] [PATCH] ueventd: Don't use a epoll timeout when it's not needed

Alexey Gladkov legion at altlinux.ru
Mon May 22 10:54:03 MSK 2023


On Mon, May 22, 2023 at 07:46:07AM +0300, Leonid Krivoshein wrote:
> Привет!
> 
> 
> Глянул финальную версию в for-master. Было неплохо, а стало намного 
> лучше. :-)
> 
> В ueventd.c(108): утечка path.

Да, пропустил утечку. Спасибо! 

> А в строках 124, 196, 324, 330 и 336 нет предупреждений?

Нет.

> В строке 178 получается странный путь для отслеживания
> ("%s/queue/pause/."), поскольку параметр name="." -- так задумано или
> тут д.б. ".all"?

Так и задумано. Может это не самое удачное решение для watch_path(). Нужна
была возможность указывать саму директорию filter_dir. Мне не хотелось
дополнительно копировать и подготавливать строку ради единственного вызова
watch_path() на старте. Поэтому в этом и остальных местах в качестве name
просто передаётся ".".

> В memory.c несколько удивляет неудобство интерфейса rd_asprintf_or_die() 
> -- зачем тащить указатель на переменную в первом параметре и потом её 
> возвращать? Мне кажется, тут можно обойтись локальной переменной и не 
> тащить указатель через стек, к тому же 'char *'.

Очень хорошая мысль. Код становится более читабильным.

Правда, наткнулся на предупреждение от компилятора:

datasrc/libinitramfs/memory.c:30:7: warning: function might be candidate for attribute ‘noreturn’ [-Wsuggest-attribute=noreturn]                                                                                    
   30 | char *rd_asprintf_or_die(const char *fmt, ...)                                                                                                                                                              
      |       ^~~~~~~~~~~~~~~~~~

да, функция делает exit при условии ошибки vasprintf, но при этом функция
явно делает return. Какой тут нафиг noreturn ? Я не нашёл способов
исправить это кроме как выключить -Wmissing-noreturn.

> В queue-processor.c вызовы open() в 51, 55 и 59 так и остались не 
> обёрнуты, на хорошей нагрузке это может приводить к произвольным 
> фатальным вылетам с Interrupted system call. К слову, абсолютно все 
> close() в коде теоретически могут быть этому подвержены.

Я передумал оборачивать open/close. open может получить на медленном
устройстве, что маловероятно для initramfs.

-- 
Rgrds, legion



More information about the Make-initrd mailing list