فهرست منبع

Handle POLLNVAL in coroipcc

Old code in coroipcc doesn't handle POLLNVAL. It can happen, that some
applications (for example fenced) will stuck forever.

Also poll result is now handled more correctly.


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2789 fd59a12c-fef9-0310-b244-a6a79926bd2f
Jan Friesse 16 سال پیش
والد
کامیت
171f65578c
1فایلهای تغییر یافته به همراه9 افزوده شده و 2 حذف شده
  1. 9 2
      lib/coroipcc.c

+ 9 - 2
lib/coroipcc.c

@@ -478,11 +478,18 @@ retry_semwait:
 		pfd.fd = ipc_instance->fd;
 		pfd.events = 0;
 
-		poll (&pfd, 1, 0);
-		if (pfd.revents == POLLERR || pfd.revents == POLLHUP) {
+		res = poll (&pfd, 1, 0);
+
+		if (res == -1 && errno != EINTR) {
 			return (CS_ERR_LIBRARY);
 		}
 
+		if (res == 1) {
+			if (pfd.revents == POLLERR || pfd.revents == POLLHUP || pfd.revents == POLLNVAL) {
+				return (CS_ERR_LIBRARY);
+			}
+		}
+
 		goto retry_semwait;
 	}