php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #65800
Patch fpm-solaris-event_ports revision 2015-09-20 08:18 UTC by rainer dot jung at kippdata dot de
Patch patch-sapi_fpm_fpm_events_port.c revision 2014-06-13 12:58 UTC by filip at hajny dot net

Patch patch-sapi_fpm_fpm_events_port.c for FPM related Bug #65800

Patch version 2014-06-13 12:58 UTC

Return to Bug #65800 | Download this patch
This patch is obsolete

Obsoleted by patches:

Patch Revisions:

Developer: filip@hajny.net

--- sapi/fpm/fpm/events/port.c.orig	2013-09-18 05:48:57.000000000 +0000
+++ sapi/fpm/fpm/events/port.c
@@ -124,6 +124,7 @@ static int fpm_event_port_wait(struct fp
 	t.tv_nsec = (timeout % 1000) * 1000 * 1000;
 
 	/* wait for inconming event or timeout. We want at least one event or timeout */
+again:
 	nget = 1;
 	ret = port_getn(pfd, events, nevents, &nget, &t);
 	if (ret < 0) {
@@ -133,17 +134,31 @@ static int fpm_event_port_wait(struct fp
 			zlog(ZLOG_WARNING, "poll() returns %d", errno);
 			return -1;
 		}
+
+		if (errno == EINTR)
+			goto again;
+
+		return 0;
 	}
 
 	for (i = 0; i < nget; i++) {
+		struct fpm_event_s *ev;
 
 		/* do we have a ptr to the event ? */
 		if (!events[i].portev_user) {
 			continue;
 		}
 
+		ev = (struct fpm_event_s *)events[i].portev_user;
+
+		if (port_associate(pfd, PORT_SOURCE_FD,
+		    ev->fd, POLLIN, (void *)ev) < 0) {
+			zlog(ZLOG_ERROR, "port: unable to add the event");
+			return -1;
+		}
+
 		/* fire the event */
-		fpm_event_fire((struct fpm_event_s *)events[i].portev_user);
+		fpm_event_fire(ev);
 
 		/* sanity check */
 		if (fpm_globals.parent_pid != getpid()) {
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Wed Oct 09 00:01:27 2024 UTC