Changeset 32640


Ignore:
Timestamp:
2012-07-06T19:29:25+02:00 (6 years ago)
Author:
jow
Message:

[package] uhttpd: do not subscribe to epoll write events
Watch child read pipe end for data instead of relying on socket write
notification to process cgi data, should lower cpu consumption during
requests on weaker devices.

Location:
trunk/package/uhttpd
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/uhttpd/Makefile

    r32419 r32640  
    99 
    1010PKG_NAME:=uhttpd 
    11 PKG_RELEASE:=36 
     11PKG_RELEASE:=37 
    1212 
    1313PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) 
  • trunk/package/uhttpd/src/uhttpd-cgi.c

    r32419 r32640  
    531531 
    532532                state->cl = cl; 
     533                state->cl->pipe.fd = rfd[0]; 
    533534                state->cl->proc.pid = child; 
    534535 
  • trunk/package/uhttpd/src/uhttpd-lua.c

    r32419 r32640  
    559559 
    560560                state->cl = cl; 
     561                state->cl->pipe.fd = rfd[0]; 
    561562                state->cl->proc.pid = child; 
    562563 
  • trunk/package/uhttpd/src/uhttpd-utils.c

    r31931 r32640  
    997997                                uloop_process_delete(&cur->proc); 
    998998 
     999                        if (cur->pipe.fd) 
     1000                                uloop_fd_delete(&cur->pipe); 
     1001 
    9991002                        uloop_fd_delete(&cur->fd); 
    10001003                        close(cur->fd.fd); 
  • trunk/package/uhttpd/src/uhttpd.c

    r32005 r32640  
    220220 
    221221                l->fd.cb = uh_listener_cb; 
    222                 uloop_fd_add(&l->fd, ULOOP_READ | ULOOP_WRITE); 
     222                uloop_fd_add(&l->fd, ULOOP_READ); 
    223223 
    224224                bound++; 
     
    540540                { 
    541541                        /* add client socket to global fdset */ 
    542                         uloop_fd_add(&cl->fd, ULOOP_READ | ULOOP_WRITE); 
     542                        uloop_fd_add(&cl->fd, ULOOP_READ); 
    543543 
    544544#ifdef HAVE_TLS 
     
    568568                } 
    569569        } 
     570} 
     571 
     572static void uh_pipe_cb(struct uloop_fd *u, unsigned int events) 
     573{ 
     574        struct client *cl = container_of(u, struct client, pipe); 
     575 
     576        D("SRV: Client(%d) pipe(%d) readable\n", cl->fd.fd, cl->pipe.fd); 
     577 
     578        uh_client_cb(&cl->fd, ULOOP_WRITE); 
    570579} 
    571580 
     
    687696                } 
    688697 
     698                /* request handler spawned a pipe, register handler */ 
     699                if (cl->pipe.fd) 
     700                { 
     701                        D("SRV: Client(%d) pipe(%d) spawned\n", u->fd, cl->pipe.fd); 
     702 
     703                        cl->pipe.cb = uh_pipe_cb; 
     704                        uloop_fd_add(&cl->pipe, ULOOP_READ); 
     705                } 
     706 
    689707                /* request handler spawned a child, register handler */ 
    690708                if (cl->proc.pid) 
     
    702720                D("SRV: Client(%d) dispatched\n", u->fd); 
    703721                cl->dispatched = true; 
    704                 return; 
    705722        } 
    706723 
  • trunk/package/uhttpd/src/uhttpd.h

    r31931 r32640  
    161161#endif 
    162162        struct uloop_fd fd; 
     163        struct uloop_fd pipe; 
    163164        struct uloop_process proc; 
    164165        struct uloop_timeout timeout; 
Note: See TracChangeset for help on using the changeset viewer.