The branch, master has been updated
via 4953b1f Fix ETIME handling for Solaris event ports.
from 1f6495b ctdb/server: fix gcc6 build warning.
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 4953b1f73f8ec9387516be1058434d71937e1447
Author: Nathan Huff <[email protected]>
Date: Fri Feb 5 13:35:07 2016 -0700
Fix ETIME handling for Solaris event ports.
It is possible for port_getn to return -1 with errno set to ETIME and
still return events. If those events aren't processed the association is
lost by samba since the kernel dissacociated them and samba never
processed them so never reassociated them with the event port. The
patch checks the nget return value in the case of ETIME and if it is non
0 it doesn't return and goes through the event processing loop.
Signed-off-by: Nathan Huff <[email protected]>
Reviewed-by: Ralph Boehme <[email protected]>
Reviewed-by: Jeremy Allison <[email protected]>
Autobuild-User(master): Ralph Böhme <[email protected]>
Autobuild-Date(master): Sun Feb 7 11:26:35 CET 2016 on sn-devel-144
-----------------------------------------------------------------------
Summary of changes:
lib/tevent/tevent_port.c | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
Changeset truncated at 500 lines:
diff --git a/lib/tevent/tevent_port.c b/lib/tevent/tevent_port.c
index 5b487d7..4b524df 100644
--- a/lib/tevent/tevent_port.c
+++ b/lib/tevent/tevent_port.c
@@ -496,10 +496,24 @@ static int port_event_loop(struct port_event_context
*port_ev, struct timeval *t
return 0;
}
- if (ret == -1 && port_errno == ETIME && tvalp) {
- /* we don't care about a possible delay here */
- tevent_common_loop_timer_delay(ev);
- return 0;
+ if (ret == -1 && port_errno == ETIME) {
+ /*
+ * If errno is set to ETIME it is possible that we still got an
event.
+ * In that case we need to go through the processing loop so
that we
+ * reassociate the received event with the port or the
association will
+ * be lost so check the value of nget is 0 before returning.
+ */
+ if (nget == 0) {
+ /* we don't care about a possible delay here */
+ tevent_common_loop_timer_delay(ev);
+ return 0;
+ }
+ /*
+ * Set the return value to 0 since we do not actually have an
error and we
+ * do have events that need to be processed. This keeps us
from getting
+ * caught in the generic error test.
+ */
+ ret = 0;
}
if (ret == -1) {
--
Samba Shared Repository