Upgrade of mod_fastcgi
Lilian - Devclic
lilian at devclic.fr
Fri Mar 15 16:20:06 UTC 2013
Hello,
We had an issue with mod_fasctcgi. Some requests failed with no reason
and these errors appears in the apache error log file :
[Fri Mar 15 15:38:57 2013] [error] [client 91.198.44.22] (4)Interrupted
system call: FastCGI: comm with server "/usr/local/sbin/php-fpm"
aborted: select() failed, referer:
https://sql.devclic.fr/db_structure.php?token=b9b99b544a46d355583070251708d948&db=devclic_si
[Fri Mar 15 15:38:57 2013] [error] [client 91.198.44.22] FastCGI:
incomplete headers (0 bytes) received from server
"/usr/local/sbin/php-fpm", referer:
https://sql.devclic.fr/db_structure.php?token=b9b99b544a46d355583070251708d948&db=devclic_si
We had the same issue on Ubuntu and Debian system and we update the
version to the latest 2.4.7.
So, can you update the port to this version ? Or can you put this fix in
the source code :
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=504132
> Index: libapache-mod-fastcgi-2.4.2/mod_fastcgi.c
> ===================================================================
> --- libapache-mod-fastcgi-2.4.2.orig/mod_fastcgi.c 2008-11-02
16:42:49.000000000 +0000
> +++ libapache-mod-fastcgi-2.4.2/mod_fastcgi.c 2008-11-02
16:50:46.000000000 +0000
> @@ -2178,12 +2178,15 @@
> }
>
> /* wait on the socket */
> - select_status = ap_select(nfds, &read_set, &write_set, NULL,
&timeout);
> + /* Interrupted system calls do happen now and then, so retry
on EINTR */
> + do {
> + select_status = ap_select(nfds, &read_set, &write_set,
NULL, &timeout);
> + } while (select_status < 0 && errno == EINTR);
>
> if (select_status < 0)
> {
> ap_log_rerror(FCGI_LOG_ERR_ERRNO, r, "FastCGI: comm with
server "
> - "\"%s\" aborted: select() failed", fr->fs_path);
> + "\"%s\" aborted: select() failed: \"%s\"",
fr->fs_path, strerror(errno));
> state = STATE_ERROR;
> break;
> }
> @@ -2246,11 +2249,19 @@
> }
>
> rv = fcgi_buf_socket_recv(fr->serverInputBuffer, fr->fd);
> + /*
> + * select(2) states: Under Linux, select() may report a
socket
> + * file descriptor as "ready for reading", while
nevertheless a
> + * subsequent read blocks.
> + * Act as if the FD was not set if socket_recv returns
EAGAIN.
> + */
> + if (rv < 0 && errno == EAGAIN)
> + break;
>
> if (rv < 0)
> {
> ap_log_rerror(FCGI_LOG_ERR, r, "FastCGI: comm with
server "
> - "\"%s\" aborted: read failed", fr->fs_path);
> + "\"%s\" aborted: read failed: \"%s\"",
fr->fs_path, strerror(errno));
> state = STATE_ERROR;
> break;
> }
We test it on a production server and at this moment no more problem.
Thanks a lot.
Best Regards.
--
Lilian RIGARD - Devclic
Gérant - CEO & CTO
Téléphone (Standard) / Phone : +33 811 69 64 45 (Prix appel local)
Portable / Cell Phone : +33 6 29 59 21 34
E-mail : lilian at devclic.fr
Web : http://www.devclic.fr
Visitez nos sites internet : Forum-Webmaster
<http://www.forum-webmaster.com> - MeilleursPrix
<http://www.meilleursprix.net> - NDFR <http://www.ndfr.net> -
E-commercant <http://www.e-commercant.com> - Blog du High-Tech
<http://www.blogduhightech.com>
More information about the freebsd-apache
mailing list