Hi, guys Thanks Chris first :) Please take a look at the attachments, I got it from my mail archive. The errorlog patch is a minor patch. the poll patch change not much lines of code, but it did come with original idea. If Piotr Gackiewicz think his job is "simple repairs", I think these patchs can be put to "minor patch" group too.
Thanks ----- Original Message ----- From: "Chris Darroch" <chr...@pearsoncmg.com> To: <dev@httpd.apache.org> Sent: Wednesday, December 31, 2008 1:31 PM Subject: Re: mod_fcgid license questions > pqf wrote: > >> version 1.10 ( Jul 3rd 2006 ) >> 1. Use poll() instead of select() in UNIX. It becomes problematic on >> apache2 with large number of logfiles. Apache2 calls poll() >> (when OS supports it), and in that case it doesn't need to be recompiled >> with larger FD_SETSIZE. select() is still limited to FD_SETSIZE." >> (Thank Piotr Gackiewicz gacek at intertele.pl for the patch.) >> 2. Bug fix: "Some requests fail with HTTP 500 and no errorlog entry is >> generated" (Thank Piotr Gackiewicz gacek at intertele.pl for the patch.) > > Ryan has been in touch with Piotr Gackiewicz independently and Piotr > asks if we can confirm that a CLA and SGA are necessary, as he considers > his contribution to have been just "simple repairs" (his term). > > From looking over the CVS repository at > http://mod-fcgid.cvs.sourceforge.net/viewvc/mod-fcgid/mod_fcgid/ > it would appear to me that these patches amount to the following. > > Foes anyone have a sense of whether these would indeed require > a CLA and SGA? > > Chris. > > ================================================= > --- fcgid_bridge.c 2006/01/22 14:16:23 1.25 > +++ fcgid_bridge.c 2006/05/13 23:45:44 1.26 > @@ -256,8 +256,11 @@ > } > > bucket_ctx = apr_pcalloc(request_pool, sizeof(*bucket_ctx)); > - if (!bucket_ctx) > + if (!bucket_ctx) { > + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, r->server, > + "mod_fcgid: apr_calloc of %d bytes failed in > handle_request function", sizeof(*bucket_ctx)); > return HTTP_INTERNAL_SERVER_ERROR; > + } > bucket_ctx->ipc.connect_timeout = g_connect_timeout; > bucket_ctx->ipc.communation_timeout = g_comm_timeout; > bucket_ctx->ipc.request = r; > @@ -315,7 +318,7 @@ > > /* Now I get a connected ipc handle */ > if (!bucket_ctx->procnode) { > - ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server, > + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, r->server, > "mod_fcgid: can't apply process slot for %s", argv0); > return HTTP_SERVICE_UNAVAILABLE; > } > @@ -326,7 +329,7 @@ > if ((rv = > proc_write_ipc(main_server, &bucket_ctx->ipc, > output_brigade)) != APR_SUCCESS) { > - ap_log_error(APLOG_MARK, APLOG_INFO, rv, r->server, > + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, r->server, > "mod_fcgid: write data to fastcgi server error"); > bucket_ctx->has_error = 1; > return HTTP_INTERNAL_SERVER_ERROR; > @@ -335,8 +338,11 @@ > /* Create brigade */ > brigade_stdout = > apr_brigade_create(request_pool, r->connection->bucket_alloc); > - if (!brigade_stdout) > + if (!brigade_stdout) { > + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, r->server, > + "mod_fcgid: apr_brigade_create failed in handle_request > function"); > return HTTP_INTERNAL_SERVER_ERROR; > + } > APR_BRIGADE_INSERT_TAIL(brigade_stdout, > ap_bucket_fcgid_header_create(r->connection-> > bucket_alloc, > @@ -346,7 +352,11 @@ > /* Check the script header first. If got error, return immediately */ > if ((cond_status = ap_scan_script_header_err_core > (r, sbuf, getsfunc_fcgid_BRIGADE, brigade_stdout)) >= 400) > + { > + ap_log_error(APLOG_MARK, APLOG_INFO, rv, r->server, > + "mod_fcgid: ap_scan_script_header_err_core failed in > handle_request function: %d", cond_status); > return cond_status; > + } > > /* Check redirect */ > location = apr_table_get(r->headers_out, "Location"); > @@ -377,6 +387,9 @@ > if ((rv = > ap_pass_brigade(r->output_filters, > brigade_stdout)) != APR_SUCCESS) { > + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, r->server, > + "mod_fcgid: ap_pass_brigade failed in handle_request > function"); > + > return HTTP_INTERNAL_SERVER_ERROR; > } > > @@ -437,7 +450,7 @@ > AP_MODE_READBYTES, > APR_BLOCK_READ, > HUGE_STRING_LEN)) != APR_SUCCESS) { > - ap_log_error(APLOG_MARK, APLOG_INFO, rv, > + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, > main_server, > "mod_fcgid: can't get data from http client"); > apr_brigade_destroy(output_brigade); > --- arch/unix/fcgid_proc_unix.c 2006/01/22 14:16:23 1.27 > +++ arch/unix/fcgid_proc_unix.c 2006/05/13 23:45:44 1.28 > @@ -2,6 +2,7 @@ > #include <sys/un.h> > #include <sys/types.h> > #include <netinet/tcp.h> /* For TCP_NODELAY */ > +#include <sys/poll.h> > #define CORE_PRIVATE > #include "httpd.h" > #include "apr_thread_proc.h" > @@ -525,10 +526,9 @@ > fcgid_ipc * ipc_handle, const char *buffer, > apr_size_t * size) > { > - fd_set rset; > - struct timeval tv; > int retcode, unix_socket; > fcgid_namedpipe_handle *handle_info; > + struct pollfd pollfds[1]; > > handle_info = (fcgid_namedpipe_handle *) ipc_handle->ipc_handle_info; > unix_socket = handle_info->handle_socket; > @@ -547,17 +547,16 @@ > } > > /* I have to wait a while */ > - FD_ZERO(&rset); > - FD_SET(unix_socket, &rset); > + > + pollfds[0].fd = unix_socket; > + pollfds[0].events = POLLIN; > do { > - tv.tv_usec = 0; > - tv.tv_sec = ipc_handle->communation_timeout; > - retcode = select(unix_socket + 1, &rset, NULL, NULL, &tv); > - } while (retcode == -1 && APR_STATUS_IS_EINTR(errno)); > + retcode = poll(pollfds, 1, ipc_handle->communation_timeout*1000); > + } while (retcode <= 0 && APR_STATUS_IS_EINTR(errno)); > if (retcode == -1) { > - ap_log_error(APLOG_MARK, APLOG_INFO, errno, > + ap_log_error(APLOG_MARK, APLOG_ERR, errno, > main_server, > - "mod_fcgid: select unix domain socket error"); > + "mod_fcgid: poll unix domain socket error"); > return errno; > } else if (retcode == 0) { > ap_log_error(APLOG_MARK, APLOG_INFO, 0, > @@ -567,7 +566,6 @@ > return APR_ETIMEDOUT; > } > > - /* Read again after select() */ > do { > if ((retcode = read(unix_socket, (void *) buffer, *size)) > 0) { > *size = retcode; > @@ -592,10 +590,9 @@ > struct iovec *vec, int nvec, > int *writecnt) > { > - fd_set wset; > - struct timeval tv; > int retcode, unix_socket; > fcgid_namedpipe_handle *handle_info; > + struct pollfd pollfds[1]; > > handle_info = (fcgid_namedpipe_handle *) ipc_handle->ipc_handle_info; > unix_socket = handle_info->handle_socket; > @@ -610,14 +607,12 @@ > if (!APR_STATUS_IS_EAGAIN(errno)) > return errno; > > - /* Select() */ > - FD_ZERO(&wset); > - FD_SET(unix_socket, &wset); > + /* poll() */ > + pollfds[0].fd = unix_socket; > + pollfds[0].events = POLLOUT; > do { > - tv.tv_usec = 0; > - tv.tv_sec = ipc_handle->communation_timeout; > - retcode = select(unix_socket + 1, NULL, &wset, NULL, &tv); > - } while (retcode == -1 && APR_STATUS_IS_EINTR(errno)); > + retcode = poll(pollfds, 1, ipc_handle->communation_timeout*1000); > + } while (retcode <= 0 && APR_STATUS_IS_EINTR(errno)); > if (retcode == -1) > return errno; > > ================================================= >
mod_fcgid.1.09-errorlog.patch
Description: Binary data
mod_fcgid.1.08-poll.patch
Description: Binary data