summaryrefslogtreecommitdiff
path: root/dev-python/eventlet/files/eventlet-0.25.1-sparc.patch
blob: c7f6a75b4f3cdeab2bd2790973ad43761cff3a7d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
From b288e969b6a0ed24913114b7b7eaad5010db5ce1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Fri, 29 May 2020 09:04:37 +0200
Subject: [PATCH 1/4] tests: F_SETFL does not return flags, use F_GETFL again

Fix TestGreenSocket.test_skip_nonblocking() to call F_GETFL again
to get the flags for the socket.  Previously, the code wrongly assumed
F_SETFL will return flags while it always returns 0 (see fcntl(2)).
---
 tests/greenio_test.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tests/greenio_test.py b/tests/greenio_test.py
index 39d77737b..593444d07 100644
--- a/tests/greenio_test.py
+++ b/tests/greenio_test.py
@@ -634,7 +634,8 @@ def test_skip_nonblocking(self):
         sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         fd = sock1.fd.fileno()
         flags = fcntl.fcntl(fd, fcntl.F_GETFL)
-        flags = fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~os.O_NONBLOCK)
+        fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~os.O_NONBLOCK)
+        flags = fcntl.fcntl(fd, fcntl.F_GETFL)
         assert flags & os.O_NONBLOCK == 0
 
         sock2 = socket.socket(sock1.fd, set_nonblocking=False)

From 803422302f5e813f1f00435d7ae943bf8513946c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Fri, 29 May 2020 09:07:17 +0200
Subject: [PATCH 2/4] tests: Unset O_NONBLOCK|O_NDELAY to fix SPARC

Fix TestGreenSocket.test_skip_nonblocking() to unset both O_NONBLOCK
and O_NDELAY.  This is necessary to fix tests on SPARC where both flags
are used simultaneously, and unsetting one is ineffective (flags remain
the same).  This should not affect other platforms where O_NDELAY
is an alias for O_NONBLOCK.
---
 tests/greenio_test.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tests/greenio_test.py b/tests/greenio_test.py
index 593444d07..736c2e539 100644
--- a/tests/greenio_test.py
+++ b/tests/greenio_test.py
@@ -634,7 +634,9 @@ def test_skip_nonblocking(self):
         sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         fd = sock1.fd.fileno()
         flags = fcntl.fcntl(fd, fcntl.F_GETFL)
-        fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~os.O_NONBLOCK)
+        # on SPARC, nonblocking mode sets O_NDELAY as well
+        fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~(os.O_NONBLOCK
+                                                 | os.O_NDELAY))
         flags = fcntl.fcntl(fd, fcntl.F_GETFL)
         assert flags & os.O_NONBLOCK == 0
 

From b742b443d079ec9001a1452e138773b066ed784e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Fri, 29 May 2020 09:09:07 +0200
Subject: [PATCH 3/4] tests: Assume that nonblocking mode might set O_NDELAY to
 fix SPARC

Fix test_set_nonblocking() to account for the alternative possible
outcome that enabling non-blocking mode can set both O_NONBLOCK
and O_NDELAY as it does on SPARC.  Note that O_NDELAY may be a superset
of O_NONBLOCK, so we can't just filter it out of new_flags.
---
 tests/greenio_test.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tests/greenio_test.py b/tests/greenio_test.py
index 736c2e539..a2d1ad856 100644
--- a/tests/greenio_test.py
+++ b/tests/greenio_test.py
@@ -925,7 +925,10 @@ def test_set_nonblocking():
     assert orig_flags & os.O_NONBLOCK == 0
     greenio.set_nonblocking(sock)
     new_flags = fcntl.fcntl(fileno, fcntl.F_GETFL)
-    assert new_flags == (orig_flags | os.O_NONBLOCK)
+    # on SPARC, O_NDELAY is set as well, and it might be a superset
+    # of O_NONBLOCK
+    assert (new_flags == (orig_flags | os.O_NONBLOCK)
+            or new_flags == (orig_flags | os.O_NONBLOCK | os.O_NDELAY))
 
 
 def test_socket_del_fails_gracefully_when_not_fully_initialized():

From d324431b14ea57c6d7b295bd8b00f128ed4c2f5a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Fri, 29 May 2020 09:17:21 +0200
Subject: [PATCH 4/4] tests: Increase timeout for
 test_isolate_from_socket_default_timeout

Increase the timeout used for test_isolate_from_socket_default_timeout
from 1 second to 5 seconds.  Otherwise, the test can't succeed
on hardware where Python runs slower.  In particular, on our SPARC box
importing greenlet modules takes almost 2 seconds, so the test program
does not even start properly.

Fixes #614
---
 tests/tpool_test.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/tpool_test.py b/tests/tpool_test.py
index 4826f30de..1a730dc10 100644
--- a/tests/tpool_test.py
+++ b/tests/tpool_test.py
@@ -366,7 +366,7 @@ def test_leakage_from_tracebacks(self):
 
 
 def test_isolate_from_socket_default_timeout():
-    tests.run_isolated('tpool_isolate_socket_default_timeout.py', timeout=1)
+    tests.run_isolated('tpool_isolate_socket_default_timeout.py', timeout=5)
 
 
 def test_exception_leak():