ソースを参照

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;
 	}