Просмотр исходного кода

correct broken POLLHUP, POLLERR under BSD

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1228 fd59a12c-fef9-0310-b244-a6a79926bd2f
Fabien Thomas 19 лет назад
Родитель
Сommit
7f1ba08543
2 измененных файлов с 8 добавлено и 7 удалено
  1. 4 2
      exec/ipc.c
  2. 4 5
      lib/util.c

+ 4 - 2
exec/ipc.c

@@ -669,8 +669,10 @@ retry_recv:
 		return;
 	} else
 	if (res == 0) {
-#ifdef OPENAIS_SOLARIS
-		/* res == 0 means hang up on Solaris */
+#if defined(OPENAIS_SOLARIS) || defined(OPENAIS_BSD) || defined(OPENAIS_DARWIN)
+		/* On many OS poll never return POLLHUP or POLLERR.
+		 * EOF is detected when recvmsg return 0.
+		 */
 		libais_disconnect_request (conn_info);
 #endif
 		return;

+ 4 - 5
lib/util.c

@@ -254,12 +254,11 @@ retry_recv:
 	if (result == -1 && errno == EAGAIN) {
 		goto retry_recv;
 	}
-#ifdef OPENAIS_SOLARIS
+#if defined(OPENAIS_SOLARIS) || defined(OPENAIS_BSD) || defined(OPENAIS_DARWIN)
+	/* On many OS poll never return POLLHUP or POLLERR.
+	 * EOF is detected when recvmsg return 0.
+	 */
 	if (result == 0) {
-		/*
-		 * In case of disconnection, recvmsg() returns 0 and next calls to
-		 * poll() always return POLLIN
-		 */
 		error = SA_AIS_ERR_BAD_HANDLE;
 		goto error_exit;
 	}