Ticket #9142: srt-epoll.patch

File srt-epoll.patch, 2.0 KB (added by Marton Balint, 6 years ago)
  • libavformat/libsrt.c

    diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c
    index 233e9096fa..f87b10efe1 100644
    a b static int libsrt_listen(int eid, int fd, const struct sockaddr *addr, socklen_t  
    233233    if (srt_listen(fd, 1))
    234234        return libsrt_neterrno(h);
    235235
    236     ret = libsrt_network_wait_fd_timeout(h, eid, 1, timeout, &h->interrupt_callback);
     236    ret = libsrt_network_wait_fd_timeout(h, eid, 0, timeout, &h->interrupt_callback);
    237237    if (ret < 0)
    238238        return ret;
    239239
    … … static int libsrt_setup(URLContext *h, const char *uri, int flags)  
    375375    char hostname[1024],proto[1024],path[1024];
    376376    char portstr[10];
    377377    int64_t open_timeout = 0;
    378     int eid, write_eid;
     378    int eid;
    379379
    380380    av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname),
    381381        &port, path, sizeof(path), uri);
    … … static int libsrt_setup(URLContext *h, const char *uri, int flags)  
    435435    if (libsrt_socket_nonblock(fd, 1) < 0)
    436436        av_log(h, AV_LOG_DEBUG, "libsrt_socket_nonblock failed\n");
    437437
    438     ret = write_eid = libsrt_epoll_create(h, fd, 1);
    439     if (ret < 0)
    440         goto fail1;
    441438    if (s->mode == SRT_MODE_LISTENER) {
     439        int read_eid = ret = libsrt_epoll_create(h, fd, 0);
     440        if (ret < 0)
     441            goto fail1;
    442442        // multi-client
    443         ret = libsrt_listen(write_eid, fd, cur_ai->ai_addr, cur_ai->ai_addrlen, h, s->listen_timeout);
    444         srt_epoll_release(write_eid);
     443        ret = libsrt_listen(read_eid, fd, cur_ai->ai_addr, cur_ai->ai_addrlen, h, s->listen_timeout);
     444        srt_epoll_release(read_eid);
    445445        if (ret < 0)
    446446            goto fail1;
    447447        srt_close(fd);
    448448        fd = ret;
    449449    } else {
     450        int write_eid = ret = libsrt_epoll_create(h, fd, 1);
     451        if (ret < 0)
     452            goto fail1;
    450453        if (s->mode == SRT_MODE_RENDEZVOUS) {
    451454            if (srt_bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen)) {
    452455                ret = libsrt_neterrno(h);