When libqb-0.14.2 (master) is used with pacemaker 1.1.8 (master) the following 2 lines are
logged:
Sep 21 23:17:27 [19442] cib: error: _process_request_: recv from client
connection failed (19442-19447-12): Error 0 (0)
Sep 21 23:17:27 [19442] cib: error: qb_ipcs_dispatch_connection_request:
request returned error (19442-19447-12): Transport endpoint is not connected (134)
In Solaris/OpenIndiana qb_ipc_us_recv_at_most returns -ENOTCONN when a client
disconnects.
_process_request_ and qb_ipcs_dispatch_connection_request don't know this and log the
2 errors.
With this patch the logging is suppressed.
Andreas
diff --git a/lib/ipcs.c b/lib/ipcs.c
index 0fa7142..ac9c9fa 100644
--- a/lib/ipcs.c
+++ b/lib/ipcs.c
@@ -627,7 +627,8 @@ _process_request_(struct qb_ipcs_connection *c, int32_t ms_timeout)
ms_timeout);
}
if (size < 0) {
- if (size != -EAGAIN && size != -ETIMEDOUT) {
+ if (size == -ENOTCONN) {
+ } else if (size != -EAGAIN && size != -ETIMEDOUT) {
qb_util_perror(LOG_ERR,
"recv from client connection failed
(%s)",
c->description); @@ -774,13 +775,16 @@
qb_ipcs_dispatch_connection_request(int32_t fd, int32_t revents, void *data)
res = QB_MIN(0, res);
if (res == -EAGAIN || res == -ETIMEDOUT || res == -ENOBUFS) {
res = 0;
- }
- if (res != 0) {
+ } else if (res == -ENOTCONN) {
+ errno = -res;
+ qb_ipcs_disconnect(c);
+ res = -ESHUTDOWN;
+ } else if (res != 0) {
errno = -res;
qb_util_perror(LOG_ERR, "request returned error (%s)",
c->description);
qb_ipcs_connection_unref(c);
- }
+ }
return res;
}
Show replies by thread