Ticket #577: 07_fix_fdevents.dpatch

File 07_fix_fdevents.dpatch, 2.3 kB (added by stbuehler, 1 year ago)
Line 
1 #! /bin/sh /usr/share/dpatch/dpatch-run
2 ## 07_fix_fdevents.dpatch by  <stbuehler@freenet.de>
3 ##
4 ## All lines beginning with `## DP:' are a description of the patch.
5 ## DP: Disable fd-event on overloaded server socket
6
7 @DPATCH@
8 diff -urNad lighttpd-1.4.16~/src/base.h lighttpd-1.4.16/src/base.h
9 --- lighttpd-1.4.16~/src/base.h 2007-07-27 11:56:11.000000000 +0200
10 +++ lighttpd-1.4.16/src/base.h  2007-08-24 17:49:07.000000000 +0200
11 @@ -498,6 +498,7 @@
12         sock_addr addr;
13         int       fd;
14         int       fde_ndx;
15 +       int       suspended_fdevents;
16  
17         buffer *ssl_pemfile;
18         buffer *ssl_ca_file;
19 diff -urNad lighttpd-1.4.16~/src/connections.c lighttpd-1.4.16/src/connections.c
20 --- lighttpd-1.4.16~/src/connections.c  2007-07-27 11:56:11.000000000 +0200
21 +++ lighttpd-1.4.16/src/connections.c   2007-08-24 17:51:12.000000000 +0200
22 @@ -109,12 +109,15 @@
23  }
24  
25  int connection_close(server *srv, connection *con) {
26 -#ifdef USE_OPENSSL
27 -       server_socket *srv_sock = con->srv_socket;
28 -#endif
29 +       server_socket *srv_socket = con->srv_socket;
30 +       if (srv_socket->suspended_fdevents) {
31 +       // fdevent_event_del(srv->ev, &(srv_socket->fde_ndx), srv_socket->fd);
32 +               fdevent_event_add(srv->ev, &(srv_socket->fde_ndx), srv_socket->fd, FDEVENT_IN);
33 +               srv_socket->suspended_fdevents = 0;
34 +       }
35  
36  #ifdef USE_OPENSSL
37 -       if (srv_sock->is_ssl) {
38 +       if (srv_socket->is_ssl) {
39                 if (con->ssl) SSL_free(con->ssl);
40                 con->ssl = NULL;
41         }
42 @@ -1259,6 +1262,8 @@
43          */
44  
45         if (srv->conns->used >= srv->max_conns) {
46 +               srv_socket->suspended_fdevents = 1;
47 +               fdevent_event_del(srv->ev, &(srv_socket->fde_ndx), srv_socket->fd);
48                 return NULL;
49         }
50  
51 @@ -1277,6 +1282,8 @@
52                         break;
53                 case EMFILE:
54                         /* out of fds */
55 +                       srv_socket->suspended_fdevents = 1;
56 +                       fdevent_event_del(srv->ev, &(srv_socket->fde_ndx), srv_socket->fd);
57                         break;
58                 default:
59                         log_error_write(srv, __FILE__, __LINE__, "ssd", "accept failed:", strerror(errno), errno);
60 diff -urNad lighttpd-1.4.16~/src/network.c lighttpd-1.4.16/src/network.c
61 --- lighttpd-1.4.16~/src/network.c      2007-07-20 11:43:29.000000000 +0200
62 +++ lighttpd-1.4.16/src/network.c       2007-08-24 17:54:23.000000000 +0200
63 @@ -601,6 +601,7 @@
64  
65                 fdevent_register(srv->ev, srv_socket->fd, network_server_handle_fdevent, srv_socket);
66                 fdevent_event_add(srv->ev, &(srv_socket->fde_ndx), srv_socket->fd, FDEVENT_IN);
67 +               srv_socket->suspended_fdevents = 0;
68         }
69         return 0;
70  }