Page MenuHomeFreeBSD

Linux epoll: Register events with zero event mask.
ClosedPublic

Authored by wulf on Nov 23 2019, 12:13 PM.
Tags
None
Referenced Files
F168738241: D22516.id64831.diff
Sat, Aug 29, 9:47 PM
F168695963: D22516.diff
Sat, Aug 29, 4:35 PM
Unknown Object (File)
Thu, Aug 27, 9:51 PM
Unknown Object (File)
Thu, Aug 27, 2:33 AM
Unknown Object (File)
Tue, Aug 25, 7:14 PM
Unknown Object (File)
Tue, Aug 25, 11:18 AM
Unknown Object (File)
Tue, Aug 25, 12:49 AM
Unknown Object (File)
Mon, Aug 24, 11:31 PM
Subscribers

Details

Summary

Such events are legal and should be interpreted as EPOLLERR | EPOLLHUP.
Register a disabled kqueue event in that case as we do not support EPOLLHUP yet.

Required for Linux Steam client.

PR/240590

Test Plan
/* Sample testcase */

#include <sys/epoll.h>
#include <assert.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int
main(int argc, char *argv[])
{
        struct epoll_event event;
        int epfd;

        epfd = epoll_create1(EPOLL_CLOEXEC);
        assert(epfd);

        event.events = 0;

        if (epoll_ctl(epfd, EPOLL_CTL_ADD, STDIN_FILENO, &event) != 0) {
                perror("EPOLL_CTL_ADD failed");
                exit(EXIT_FAILURE);
        }

        if (epoll_ctl(epfd, EPOLL_CTL_MOD, STDIN_FILENO, &event) != 0) {
                perror("EPOLL_CTL_MOD failed");
                exit(EXIT_FAILURE);
        }

        if (epoll_ctl(epfd, EPOLL_CTL_DEL, STDIN_FILENO, &event) != 0) {
                perror("EPOLL_CTL_DEL failed");
                exit(EXIT_FAILURE);
        }

        printf("ok\n");
        return (EXIT_SUCCESS);
}

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable