From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,FUZZY_XPILL autolearn=no autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684603408; x=1687195408; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=kSvdbrK6iisUROk3XoTqTsjx/jHXAoPDFPmAMOtFD98=; b=BPDsvFAZU8kxLld2JnPeaK+xnwtXhBg8Hyjhl86N38H7u7xrLX0Nw7LjPbcb1PYhG/ tELTeu5esKRk7wzi4IVg5JsFk6T6pW+H4rjvGAK9eWy9tc4XndsGHQpSnmONGdD/1WGQ OVBbHB9h7wXq9GQUiElPiiPVixfBCSPhGeH6ZfgbriH2I84TfJdxjxTjJhjSHpvE8XU2 eLrbO0idNmI+B/39WFE81nE0WHdDGAqklHUjr0yle5gT/8qNQnP6m5WYyJfDCXGVmocj 1Fd06kp895WuLcMkEAUUWai0CeWlIuowMt1wM9tvG77p227NWK6veI7L2/FpgWYklue7 zsCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684603408; x=1687195408; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kSvdbrK6iisUROk3XoTqTsjx/jHXAoPDFPmAMOtFD98=; b=XqaeW2zpi+JcYqfa4qVm+P3sJnftZER8CiF+LOaQUoBIQe+DiyYlAVxkJsM0cA164S tfmV0gs+m1nwAkepcm8XT3IoGoZdPTWKX7VUwwWcDF8jE03DU7Ad3J4QEaRHjcIyNYYX 00v+ZjLH6raw3J5f1wXy+6eMgq5j5844JTETOmztxJI1cK1RpAaKOiq+11n+Rl+PG6z+ yqYfYvlR+xEaiOesYkBDCK1tXdTet7OhGoUCuUzVzRDCBBFeOZseZekFMWXQvl6tNyJV d3Gp3RdeqlquqaKOKCrerI674hANQZ5LbTA02lRXFYyhsBCE+JikHfh6eDC+YS3O9NP+ xclQ== X-Gm-Message-State: AC+VfDzLLIDypdzwJ5rIlnfZD+MncpuQgVgAO7BT6n4x8W9p81nxBzT9 VsIjnc/xVBO41SGT4Z2Gwl28efkZbO0= X-Google-Smtp-Source: ACHHUZ4LubhJud/Dmn0s4y41lrOEzjpjO1k0OkHajayBW5gSHKdcAwTvIYDOwMeMG5LL6NDZqkIirA== X-Received: by 2002:a05:6512:2186:b0:4ea:f526:5bef with SMTP id b6-20020a056512218600b004eaf5265befmr2393831lft.28.1684603408082; Sat, 20 May 2023 10:23:28 -0700 (PDT) Message-ID: <5522f0c1-adac-3db7-e569-05cda6d05d58@gmail.com> Date: Sat, 20 May 2023 20:23:26 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0 Thunderbird/102.11.0 To: make-initrd@lists.altlinux.org References: <6b444ed922286eb3df8f5322b1bddf9c55753eb8.1683200226.git.gladkov.alexey@gmail.com> Content-Language: ru, en-US From: Leonid Krivoshein In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [make-initrd] [PATCH 1/3] Reimplement ueventd X-BeenThere: make-initrd@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: make-initrd@lists.altlinux.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 May 2023 17:23:30 -0000 Archived-At: List-Archive: On 5/20/23 16:18, Alexey Gladkov wrote: > On Sat, May 20, 2023 at 12:00:14PM +0300, Leonid Krivoshein wrote: >> [...] >>> [...] >>> + >>> +typedef int (*fdhandler_t)(int); >>> + >>> +struct fd_handler { >>> + int fd; >>> + fdhandler_t fd_handler; >>> +}; >>> + >>> +struct fd_handler fd_list[FD_MAX]; >> [...] >> Имя fd_list[] тоже не очень подходящее, поскольку это не только список >> именно fd. > Принимаю предложения на более удачное название )) fdhs или fdh_list, но и новое (fd_handler_list) вполне подходит -- больше fd_handler'ов. )) >> Константа FD_MAX, хоть и не определена в использованных >> заголовочных файлах, это имя иногда встречается рядом с FD_SET(), >> FD_CLR() и им подобным макросам в других исходниках как функция >> FD_MAX(x). На всякий случай... > Это имя ни с чем не конфликтует. > > $ grep -re '\' /usr/include | wc -l > 0 Да, но используется зарезервированный префикс FD_, что с каким-то очередным изменением хедеров потенциально может дать конфликт. >>> + >>> +enum { >>> + PIPE_READ, >>> + PIPE_WRITE, >>> + PIPE_MAX, >>> +}; >>> + >>> +int pipefd[PIPE_MAX]; >> Данным фрагментом ты как бы говоришь: "я точно знаю, во что это >> превратит компилятор", слишком безапелляционно. > Стандарт си говорит: Пока у компилятора не появится глобальная опция, меняющая стартовое значение для enum, и её не поменяет кто-нибудь в сборочной среде глобально, беспокоиться и правда не стоит. > [...] >>> + fdcount = epoll_wait(epollfd, ev, EV_MAX, 250); >> Почему 250, а не -1? Напоминает не нужный в этом месте "sleep .25". Если >> бы демон перезапускался для дефрагментации через какое-то число событий >> или спустя сколько-то минут, а тут совсем холостой ход получается. > Это сделано намеренно. Раньше ты спрашивал зачем отправлять wfd родителю > через пайп. Родитель помечает очередь как F_DIRTY и на следующей итерации > эта очередь попробует обработаться даже если новых эвентов нет. Тогда стоит ввести флаг и заменить 250 на что-то вроде: have_dirty ? 250: -1 >>> + >>> + if (fdcount < 0) { >>> + if (errno == EINTR) >>> + continue; >>> + fatal("epoll_wait: %m"); >>> + } >>> + >>> + for (i = 0; i < fdcount; i++) { >>> + if (!(ev[i].events & EPOLLIN)) >>> + continue; >>> + for (int k = 0; k < FD_MAX; k++) { >>> + if (ev[i].data.fd != fd_list[k].fd) >>> + continue; >>> + if (fd_list[k].fd_handler(fd_list[k].fd) != 0) >> Непонятно, почему из всей структуры Userdata используется только >> ev->data->fd и потом элементы перебираются в циклах для поиска и >> сопоставления, хотя в ev->data при epoll_ctl(..., EPOL_CTL_ADD, ...) >> вполне можно было бы разместить всё самое интересное для ускорения доступа. > Всё? Это union. Не заметил сразу, что это union. Раз так, то уже выбранный ev->data->ptr мне тоже нравится больше. > Я мог бы положить туда либо fd, либо указатель на > fd_list[k]. В целом так и стоит сделать. Раньше fd_list не было и остался > этот атавизм. Но это позволит избавиться от цикла только в этом месте. > > [...] -- WBR, Leonid Krivoshein.