Changeset 731

Show
Ignore:
Timestamp:
04/30/07 12:50:21 (2 years ago)
Author:
alo
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • cherokee/trunk/ChangeLog

    r718 r731  
     12007-04-30  A.D.F  <adefacc@tin.it> 
     2 
     3        * cherokee/fdpoll.h: 
     4        - added new macros FDPOLL_MODE_*. 
     5 
     6        * cherokee/macros.h: 
     7        - added new macro MIN_THR_FDS and related tests. 
     8 
     9        * cherokee/server.c: 
     10        - adjusted minimum number of fds (file descriptors) 
     11          per thread; 
     12        - substituted numeric constants 0 / 1 with 
     13          equivalent defines FDPOLL_MODE_*. 
     14 
     15        * cherokee/thread.c, cherokee/fdpoll-*.c: 
     16        - substituted numeric constants 0 / 1 with 
     17          equivalent defines FDPOLL_MODE_*. 
     18         
    1192007-04-22  A.D.F  <adefacc@tin.it> 
    220 
  • cherokee/trunk/cherokee/fdpoll-epoll.c

    r702 r731  
    9696        ev.data.fd = fd; 
    9797        switch (rw) { 
    98         case 0:  
     98        case FDPOLL_MODE_READ: 
    9999                ev.events = EPOLLIN | EPOLLERR | EPOLLHUP;  
    100100                break; 
    101         case 1:  
     101        case FDPOLL_MODE_WRITE: 
    102102                ev.events = EPOLLOUT | EPOLLERR | EPOLLHUP;   
    103103                break; 
     
    182182 
    183183        switch (rw) { 
    184         case 0:  
     184        case FDPOLL_MODE_READ: 
    185185                return events & (EPOLLIN  | EPOLLERR | EPOLLHUP); 
    186         case 1:  
     186        case FDPOLL_MODE_WRITE: 
    187187                return events & (EPOLLOUT | EPOLLERR | EPOLLHUP); 
    188188        default: 
     
    215215 
    216216        switch (rw) { 
    217         case 0:  
     217        case FDPOLL_MODE_READ: 
    218218                ev.events = EPOLLIN;  
    219219                break; 
    220         case 1:  
     220        case FDPOLL_MODE_WRITE: 
    221221                ev.events = EPOLLOUT;  
    222222                break; 
  • cherokee/trunk/cherokee/fdpoll-kqueue.c

    r703 r731  
    105105        event->ident = fd; 
    106106        switch (rw) { 
    107         case 0
     107        case FDPOLL_MODE_READ
    108108                event->filter = EVFILT_READ; 
    109109                break; 
    110         case 1
     110        case FDPOLL_MODE_WRITE
    111111                event->filter = EVFILT_WRITE; 
    112112                break; 
     
    117117        event->fflags = 0; 
    118118 
    119         fdp->fdinterest[fd]=rw; 
     119        fdp->fdinterest[fd] = rw; 
    120120        fdp->nchanges++; 
    121121        return ret_ok; 
     
    201201         
    202202        switch (rw) { 
    203         case 0
     203        case FDPOLL_MODE_READ
    204204                events &= KQUEUE_READ_EVENT; 
    205205                break; 
    206         case 1
     206        case FDPOLL_MODE_WRITE
    207207                events &= KQUEUE_WRITE_EVENT; 
    208208                break; 
     
    229229         * no longer interested on it. 
    230230         */ 
    231         if ( rw && (fdp->fdinterest[fd] == 0) ) { 
    232                 return _add_change(fdp, fd, 0, EV_DELETE); 
    233         } else if ( (rw==0 ) && (fdp->fdinterest[fd] == 1) ) { 
    234                 return _add_change(fdp, fd, 1, EV_DELETE); 
     231        if ( rw == FDPOLL_MODE_WRITE && 
     232            fdp->fdinterest[fd] == FDPOLL_MODE_READ ) { 
     233                return _add_change(fdp, fd, FDPOLL_MODE_READ, EV_DELETE); 
     234        } 
     235        if ( rw == FDPOLL_MODE_READ && fdp->fdinterest[fd] == FDPOLL_MODE_WRITE ) { 
     236                return _add_change(fdp, fd, FDPOLL_MODE_WRITE, EV_DELETE); 
    235237        } 
    236238 
  • cherokee/trunk/cherokee/fdpoll-poll.c

    r702 r731  
    8383 
    8484        switch (rw) { 
    85         case 0:   
     85        case FDPOLL_MODE_READ: 
    8686                fdp->pollfds[nfd->npollfds].events = POLLIN;  
    8787                break; 
    88         case 1:  
     88        case FDPOLL_MODE_WRITE: 
    8989                fdp->pollfds[nfd->npollfds].events = POLLOUT; 
    9090                break; 
     
    104104_set_mode (cherokee_fdpoll_poll_t *fdp, int fd, int rw) 
    105105{ 
    106         fdp->pollfds[fdp->fdidx[fd]].events = (rw ? POLLOUT : POLLIN); 
     106        fdp->pollfds[fdp->fdidx[fd]].events = (rw == FDPOLL_MODE_WRITE ? POLLOUT : POLLIN); 
    107107        return ret_ok; 
    108108} 
     
    161161 
    162162        switch (rw) { 
    163                 case 0:  
     163                case FDPOLL_MODE_READ: 
    164164                        return revents & POLL_READ; 
    165                 case 1:  
     165                case FDPOLL_MODE_WRITE: 
    166166                        return revents & POLL_WRITE; 
    167167                default:  
  • cherokee/trunk/cherokee/fdpoll-port.c

    r703 r731  
    118118        int rc; 
    119119 
    120         rc = fd_associate(fdp, fd, rw?WRITE:READ); 
     120        rc = fd_associate(fdp, fd, (rw == FDPOLL_MODE_WRITE ? WRITE : READ)); 
    121121        if ( rc == -1 ) { 
    122122                PRINT_ERROR ("ERROR: port_associate: fd %d: %s\n", fd,  
     
    223223 
    224224        switch (rw) { 
    225         case 0
     225        case FDPOLL_MODE_READ
    226226                events &= (POLL_READ | POLL_ERROR); 
    227227                break; 
    228         case 1
     228        case FDPOLL_MODE_WRITE
    229229                events &= (POLL_WRITE | POLL_ERROR); 
    230230                break; 
     
    250250                             PORT_SOURCE_FD, 
    251251                             fd, 
    252                             rw ? POLLOUT : POLLIN
    253                             rw ? WRITE   : READ); 
     252                            (rw == FDPOLL_MODE_WRITE ? POLLOUT : POLLIN)
     253                            (rw == FDPOLL_MODE_WRITE ? WRITE   : READ)); 
    254254        if ( rc == -1 ) { 
    255255                PRINT_ERROR ("ERROR: port_associate: fd %d: %s\n", fd,  
  • cherokee/trunk/cherokee/fdpoll-select.c

    r703 r731  
    3939# define INFTIM -1 
    4040#endif 
    41  
    42 typedef enum { 
    43         fdp_read  = 0, 
    44         fdp_write = 1 
    45 } cherokee_fdpoll_rw_t; 
    4641 
    4742 
     
    105100        fdp->select_fds[nfd->npollfds] = fd; 
    106101        switch (rw) { 
    107         case fdp_read:  
     102        case FDPOLL_MODE_READ: 
    108103                FD_SET (fd, &fdp->master_rfdset);  
    109104                break; 
    110         case fdp_write:  
     105        case FDPOLL_MODE_WRITE: 
    111106                FD_SET (fd, &fdp->master_wfdset); 
    112107                break; 
     
    172167{ 
    173168        switch (fdp->fd_rw[fd]) { 
    174                 case fdp_read:  
     169                case FDPOLL_MODE_READ: 
    175170                        return FD_ISSET (fd, &fdp->working_rfdset); 
    176                 case fdp_write:  
     171                case FDPOLL_MODE_WRITE: 
    177172                        return FD_ISSET (fd, &fdp->working_wfdset); 
    178173        } 
  • cherokee/trunk/cherokee/fdpoll-win32.c

    r703 r731  
    3535# define INFTIM -1 
    3636#endif 
    37  
    38 typedef enum { 
    39         fdp_read  = 0, 
    40         fdp_write = 1 
    41 } cherokee_fdpoll_rw_t; 
    4237 
    4338 
     
    9691        fdp->select_fds[nfd->npollfds] = fd; 
    9792        switch (rw) { 
    98                 case fdp_read:  
     93                case FDPOLL_MODE_READ: 
    9994                        FD_SET (fd, &fdp->master_rfdset);  
    10095                        break; 
    101                 case fdp_write:  
     96                case FDPOLL_MODE_WRITE: 
    10297                        FD_SET (fd, &fdp->master_wfdset); 
    10398                        break; 
     
    160155{ 
    161156        switch (rw) { 
    162                 case fdp_read:  
     157                case FDPOLL_MODE_READ: 
    163158                        return FD_ISSET (fd, &fdp->working_rfdset); 
    164                 case fdp_write:  
     159                case FDPOLL_MODE_WRITE: 
    165160                        return FD_ISSET (fd, &fdp->working_wfdset); 
    166161        } 
  • cherokee/trunk/cherokee/fdpoll.h

    r702 r731  
    3535CHEROKEE_BEGIN_DECLS 
    3636 
     37#define FDPOLL_MODE_NONE        (-1)    /* no mode set */ 
     38#define FDPOLL_MODE_READ        0       /* poll read  side */ 
     39#define FDPOLL_MODE_WRITE       1       /* poll write side */ 
     40 
    3741typedef enum { 
    3842        cherokee_poll_epoll, 
  • cherokee/trunk/cherokee/macros.h

    r718 r731  
    103103#define MIN_SPARE_FDS                 10        /* range:  8 - 20 */ 
    104104#define MIN_MAX_FDS                    4        /* range:  4 ... 32000 */ 
     105#define MIN_THR_FDS                    4        /* range:  4 ... 32000 */ 
    105106 
    106107#if (MIN_SYSTEM_FD_NUM < 16)  
     
    112113#if (MIN_MAX_FDS < 4) 
    113114#error MIN_MAX_FDS too low, < 4 ! 
     115#endif 
     116#if (MIN_THR_FDS < 4) 
     117#error MIN_THR_FDS too low, < 4 ! 
     118#endif 
     119#if (MIN_THR_FDS > MIN_MAX_FDS) 
     120#error MIN_THR_FDS too high, > MIN_MAX_FDS ! 
    114121#endif 
    115122#if (((MIN_SYSTEM_FD_NUM - MIN_SPARE_FDS) / 2) < MIN_MAX_FDS) 
  • cherokee/trunk/cherokee/server.c

    r723 r731  
    691691#ifdef AF_LOCAL 
    692692        if (! cherokee_buffer_is_empty (&srv->unix_socket)) { 
    693                 ret = initialize_server_socket_unix (srv, socket, port);                
     693                ret = initialize_server_socket_unix (srv, socket, port); 
    694694        } 
    695695#endif 
     
    738738{        
    739739        ret_t ret; 
    740         int   i, fds_per_thread
     740        int   i, fds_per_thread, fds_per_thread1
    741741#ifdef HAVE_PTHREAD 
    742742        int   thr_fds, spare_fds; 
     
    750750        /* Set fd upper limit for threads. 
    751751         */ 
    752         if (srv->thread_num > srv->max_fds) 
    753                 srv->thread_num = srv->max_fds; 
    754         else 
     752#ifdef HAVE_PTHREAD 
     753        if (srv->thread_num > (srv->max_fds / MIN_THR_FDS)) 
     754                srv->thread_num = (srv->max_fds / MIN_THR_FDS); 
     755 
    755756        if (srv->thread_num < 1) 
    756757                srv->thread_num = 1; 
    757  
     758#else 
     759        srv->thread_num = 1; 
     760#endif 
    758761        fds_per_thread = srv->max_fds / srv->thread_num; 
    759762#ifdef HAVE_PTHREAD 
     
    761764        spare_fds = srv->max_fds - thr_fds; 
    762765#endif 
     766        fds_per_thread1 = fds_per_thread; 
     767        if (spare_fds > 0) { 
     768                spare_fds--; 
     769                fds_per_thread1++; 
     770        } 
    763771 
    764772        /* Create the main thread 
    765773         */ 
    766774        ret = cherokee_thread_new (&srv->main_thread, srv, thread_sync,  
    767                                    srv->fdpoll_method, srv->system_fd_limit, fds_per_thread); 
    768         if (unlikely(ret < ret_ok)) return ret; 
     775                                   srv->fdpoll_method, srv->system_fd_limit, fds_per_thread1); 
     776        if (unlikely(ret < ret_ok)) 
     777                return ret; 
    769778 
    770779        /* If Cherokee is compiled in single thread mode, it has to 
     
    772781         */ 
    773782#ifndef HAVE_PTHREAD 
    774         ret = cherokee_fdpoll_add (srv->main_thread->fdpoll, S_SOCKET_FD(srv->socket), 0); 
     783        ret = cherokee_fdpoll_add (srv->main_thread->fdpoll, S_SOCKET_FD(srv->socket), FDPOLL_MODE_READ); 
    775784        if (unlikely(ret < ret_ok)) return ret; 
    776785 
    777786        if (srv->tls_enabled) { 
    778                 ret = cherokee_fdpoll_add (srv->main_thread->fdpoll, S_SOCKET_FD(srv->socket_tls), 0); 
     787                ret = cherokee_fdpoll_add (srv->main_thread->fdpoll, S_SOCKET_FD(srv->socket_tls), FDPOLL_MODE_READ); 
    779788                if (unlikely(ret < ret_ok)) return ret; 
    780789        } 
     
    787796        for (i = 0; i < srv->thread_num - 1; i++) { 
    788797                cherokee_thread_t *thread; 
    789                 int                fds_per_thread1 = fds_per_thread; 
    790798 
    791799                /* Add one more fd to this thread, 
     
    794802                 * unused fds. 
    795803                 */ 
     804                fds_per_thread1 = fds_per_thread; 
    796805                if (spare_fds > 0) { 
    797806                        spare_fds--; 
     
    801810                ret = cherokee_thread_new (&thread, srv, thread_async,  
    802811                            srv->fdpoll_method, srv->system_fd_limit, fds_per_thread1); 
    803                 if (unlikely(ret < ret_ok)) return ret; 
     812                if (unlikely(ret < ret_ok)) 
     813                        return ret; 
    804814                 
    805                 thread->thread_pref = (i % 2)? thread_normal_tls : thread_tls_normal; 
     815                thread->thread_pref = (i % 2) ? thread_normal_tls : thread_tls_normal; 
    806816 
    807817                cherokee_list_add (LIST(thread), &srv->thread_list); 
     
    10091019                srv->thread_num = srv->ncpus * 5; 
    10101020        } 
    1011         if (srv->thread_num > srv->max_fds) { 
    1012                 srv->thread_num = srv->max_fds; 
     1021        /* Limit the number of threads 
     1022         * so that each thread has at least 2 fds available. 
     1023         */ 
     1024        if (srv->thread_num > (srv->max_fds / MIN_THR_FDS)) { 
     1025                srv->thread_num = (srv->max_fds / MIN_THR_FDS); 
    10131026                if (srv->thread_num < 1) 
    10141027                        srv->thread_num = 1; 
  • cherokee/trunk/cherokee/thread.c

    r706 r731  
    8080        /* Has it changed? 
    8181         */ 
    82         if (thd->bogo_now == srv->bogo_now) return; 
     82        if (thd->bogo_now == srv->bogo_now) 
     83                return; 
    8384 
    8485        /* Update time_t 
    8586         */ 
    8687        thd->bogo_now = srv->bogo_now; 
    87          
     88 
    8889        /* Update struct tm 
    8990         */ 
     
    13751376        TRACE (ENTRIES, "error accepting connection! fd %d\n", srv_socket); 
    13761377 
    1377         /* New socket has alread been closed, 
     1378        /* New socket has already been closed, 
    13781379         * so here we reinit fd to default init value. 
    13791380         */ 
     
    14861487        CHEROKEE_MUTEX_LOCK (mutex); 
    14871488         
    1488         ret = cherokee_fdpoll_add (thd->fdpoll, socket, 0); 
     1489        ret = cherokee_fdpoll_add (thd->fdpoll, socket, FDPOLL_MODE_READ); 
    14891490        if (unlikely (ret < ret_ok)) { 
    14901491                CHEROKEE_MUTEX_UNLOCK (mutex); 
     
    15341535        /* Now, it owns the socket.. 
    15351536         */ 
    1536         ret = cherokee_fdpoll_add (thd->fdpoll, socket, 0); 
     1537        ret = cherokee_fdpoll_add (thd->fdpoll, socket, FDPOLL_MODE_READ); 
    15371538        if (unlikely (ret < ret_ok)) { 
    15381539                CHEROKEE_MUTEX_UNLOCK (mutex); 
     
    15721573        unlock = CHEROKEE_MUTEX_TRY_LOCK (mutex); 
    15731574        if (!unlock) { 
    1574                 ret = cherokee_fdpoll_add (thd->fdpoll, socket, 0); 
     1575                ret = cherokee_fdpoll_add (thd->fdpoll, socket, FDPOLL_MODE_READ); 
    15751576                if (ret < ret_ok) { 
    15761577                        goto error; 
     
    15841585        unlock_tls = CHEROKEE_MUTEX_TRY_LOCK (mutex_tls); 
    15851586        if (!unlock_tls) { 
    1586                 ret = cherokee_fdpoll_add (thd->fdpoll, socket_tls, 0); 
     1587                ret = cherokee_fdpoll_add (thd->fdpoll, socket_tls, FDPOLL_MODE_READ); 
    15871588                if (unlikely (ret < ret_ok))  
    15881589                        goto error; 
     
    16661667        CHEROKEE_MUTEX_LOCK (mutex1); 
    16671668 
    1668         ret = cherokee_fdpoll_add (thd->fdpoll, socket1, 0); 
     1669        ret = cherokee_fdpoll_add (thd->fdpoll, socket1, FDPOLL_MODE_READ); 
    16691670        if (ret < ret_ok) { 
    16701671                CHEROKEE_MUTEX_UNLOCK (mutex1); 
     
    16791680        unlock2 = CHEROKEE_MUTEX_TRY_LOCK (mutex2); 
    16801681        if (!unlock2) { 
    1681                 ret = cherokee_fdpoll_add (thd->fdpoll, socket2, 0); 
     1682                ret = cherokee_fdpoll_add (thd->fdpoll, socket2, FDPOLL_MODE_READ); 
    16821683                if (ret < ret_ok) { 
    16831684                        CHEROKEE_MUTEX_UNLOCK (mutex1); 
     
    18571858        ret_t ret; 
    18581859 
    1859         ret = cherokee_fdpoll_add (thd->fdpoll, SOCKET_FD(&conn->socket), 0); 
     1860        ret = cherokee_fdpoll_add (thd->fdpoll, SOCKET_FD(&conn->socket), FDPOLL_MODE_READ); 
    18601861        if (unlikely (ret < ret_ok)) return ret; 
    18611862 
     
    20122013cherokee_thread_inject_active_connection (cherokee_thread_t *thd, cherokee_connection_t *conn) 
    20132014{ 
    2014         cherokee_fdpoll_add (thd->fdpoll, SOCKET_FD(&conn->socket), 1); 
     2015        cherokee_fdpoll_add (thd->fdpoll, SOCKET_FD(&conn->socket), FDPOLL_MODE_WRITE); 
    20152016        add_connection (thd, conn); 
    20162017