From e5dd162a07ccf49a49740edfb535652b184266c3 Mon Sep 17 00:00:00 2001
From: "Andrew M. Kuchling" <amk@amk.ca>
Date: Sat, 7 Aug 2004 17:21:27 +0000
Subject: [Bug #923315] Produce correct result on AIX

---
 Modules/selectmodule.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 26b918e..81c9e3c 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -511,7 +511,11 @@ poll_poll(pollObject *self, PyObject *args)
 			}
 			PyTuple_SET_ITEM(value, 0, num);
 
-			num = PyInt_FromLong(self->ufds[i].revents);
+			/* The &0xffff is a workaround for AIX.  'revents'
+			   is a 16-bit short, and IBM assigned POLLNVAL
+			   to be 0x8000, so the conversion to int results
+			   in a negative number. See SF bug #923315. */
+			num = PyInt_FromLong(self->ufds[i].revents & 0xffff);
 			if (num == NULL) {
 				Py_DECREF(value);
 				goto error;
-- 
cgit v0.12

