sleepy_penguin 1.4.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +3 -0
- data/.manifest +8 -2
- data/ChangeLog +295 -0
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/LATEST +19 -5
- data/LICENSE +2 -2
- data/NEWS +22 -0
- data/README +4 -4
- data/TODO +0 -2
- data/ext/sleepy_penguin/epoll.c +165 -88
- data/ext/sleepy_penguin/eventfd.c +89 -91
- data/ext/sleepy_penguin/extconf.rb +1 -0
- data/ext/sleepy_penguin/init.c +7 -0
- data/ext/sleepy_penguin/inotify.c +229 -91
- data/ext/sleepy_penguin/missing_epoll.h +30 -0
- data/ext/sleepy_penguin/missing_inotify.h +57 -0
- data/ext/sleepy_penguin/signalfd.c +335 -0
- data/ext/sleepy_penguin/sleepy_penguin.h +15 -55
- data/ext/sleepy_penguin/timerfd.c +78 -36
- data/ext/sleepy_penguin/util.c +149 -0
- data/lib/sleepy_penguin.rb +0 -6
- data/lib/sleepy_penguin/signalfd/sig_info.rb +20 -0
- data/lib/sleepy_penguin/sp.rb +4 -0
- data/pkg.mk +5 -4
- data/test/test_epoll.rb +29 -0
- data/test/test_epoll_gc.rb +1 -1
- data/test/test_epoll_optimizations.rb +5 -2
- data/test/test_eventfd.rb +24 -6
- data/test/test_inotify.rb +80 -1
- data/test/test_signalfd.rb +94 -0
- data/test/test_signalfd_siginfo.rb +32 -0
- data/test/test_timerfd.rb +34 -4
- metadata +22 -10
- data/ext/sleepy_penguin/nonblock.h +0 -19
- data/script/isolate_for_tests +0 -30
data/.document
CHANGED
data/.manifest
CHANGED
@@ -18,13 +18,17 @@ ext/sleepy_penguin/eventfd.c
|
|
18
18
|
ext/sleepy_penguin/extconf.rb
|
19
19
|
ext/sleepy_penguin/init.c
|
20
20
|
ext/sleepy_penguin/inotify.c
|
21
|
-
ext/sleepy_penguin/
|
21
|
+
ext/sleepy_penguin/missing_epoll.h
|
22
|
+
ext/sleepy_penguin/missing_inotify.h
|
23
|
+
ext/sleepy_penguin/signalfd.c
|
22
24
|
ext/sleepy_penguin/sleepy_penguin.h
|
23
25
|
ext/sleepy_penguin/timerfd.c
|
26
|
+
ext/sleepy_penguin/util.c
|
24
27
|
ext/sleepy_penguin/value2timespec.h
|
25
28
|
lib/sleepy_penguin.rb
|
29
|
+
lib/sleepy_penguin/signalfd/sig_info.rb
|
30
|
+
lib/sleepy_penguin/sp.rb
|
26
31
|
pkg.mk
|
27
|
-
script/isolate_for_tests
|
28
32
|
setup.rb
|
29
33
|
sleepy_penguin.gemspec
|
30
34
|
test/test_epoll.rb
|
@@ -32,4 +36,6 @@ test/test_epoll_gc.rb
|
|
32
36
|
test/test_epoll_optimizations.rb
|
33
37
|
test/test_eventfd.rb
|
34
38
|
test/test_inotify.rb
|
39
|
+
test/test_signalfd.rb
|
40
|
+
test/test_signalfd_siginfo.rb
|
35
41
|
test/test_timerfd.rb
|
data/ChangeLog
CHANGED
@@ -1,5 +1,300 @@
|
|
1
1
|
ChangeLog from http://bogomips.org/sleepy_penguin.git
|
2
2
|
|
3
|
+
commit cdebfac019b5e771f7babc5646a3c7961729eaca
|
4
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
5
|
+
Date: Thu Mar 10 04:35:41 2011 +0000
|
6
|
+
|
7
|
+
sleepy_penguin 2.0.0
|
8
|
+
|
9
|
+
There are many internal cleanups, bugfixes, and incompatible
|
10
|
+
API changes. The API will probably be stable from now on.
|
11
|
+
|
12
|
+
All the flag passing is less verbose, in the past you had
|
13
|
+
to do:
|
14
|
+
|
15
|
+
tfd = TimerFD.new(TimerFD::CLOEXEC|TimerFD::NONBLOCK)
|
16
|
+
|
17
|
+
Now, you can just do (the old way still works):
|
18
|
+
|
19
|
+
tfd = TimerFD.new([:CLOEXEC, :NONBLOCK])
|
20
|
+
|
21
|
+
A SignalFD interface now exists, but is not recommended since
|
22
|
+
MRI signal handling seems to conflict with it.
|
23
|
+
|
24
|
+
Inotify#close no longer holds the GVL while closing the
|
25
|
+
descriptor since it is an expensive operation.
|
26
|
+
|
27
|
+
See git log v1.4.0..v2.0.0 for all the gory details.
|
28
|
+
|
29
|
+
commit d76fe634dfb3ed40b2ff02307963ac38d731d54e
|
30
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
31
|
+
Date: Thu Mar 10 04:43:06 2011 +0000
|
32
|
+
|
33
|
+
signalfd.c: fix whitespace
|
34
|
+
|
35
|
+
commit 3721229d20880694f3c5a3a7a3fa401b19c5870b
|
36
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
37
|
+
Date: Thu Mar 10 04:35:06 2011 +0000
|
38
|
+
|
39
|
+
inotify: release GVL during Inotify#close on 1.9
|
40
|
+
|
41
|
+
close(2) on inotify descriptors takes forever and a day.
|
42
|
+
|
43
|
+
commit 5905791c3373cf9cd1fce4da28acf9b16f721c3a
|
44
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
45
|
+
Date: Thu Mar 10 03:28:48 2011 +0000
|
46
|
+
|
47
|
+
inotify: add Inotify#each method for yielding each event
|
48
|
+
|
49
|
+
This is useful for processing events in a synchronous fashion,
|
50
|
+
we think...
|
51
|
+
|
52
|
+
commit 7142fa6bd85fd5a256049f158b6c29399eee7c7c
|
53
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
54
|
+
Date: Thu Mar 10 03:27:58 2011 +0000
|
55
|
+
|
56
|
+
inotify.c: fix local variable name for RDoc
|
57
|
+
|
58
|
+
"in" is a keyword in Ruby and unusable as a local variable
|
59
|
+
|
60
|
+
commit 02bba7d2200cb4225e50dba51d8bcc5cc6e6d677
|
61
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
62
|
+
Date: Thu Mar 10 03:27:32 2011 +0000
|
63
|
+
|
64
|
+
README: misc updates
|
65
|
+
|
66
|
+
commit 7c3447f481067ac6d25b291e206e23a6b55d78d1
|
67
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
68
|
+
Date: Thu Mar 10 02:40:26 2011 +0000
|
69
|
+
|
70
|
+
packaging updates, remove Isolate dependency
|
71
|
+
|
72
|
+
commit eb12922fdc860ce780617a3b8302cad7c6ff9666
|
73
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
74
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
75
|
+
|
76
|
+
signalfd: attempt to support POSIX real-time signals
|
77
|
+
|
78
|
+
I know of no other way to support them in Ruby
|
79
|
+
|
80
|
+
commit eab2b76b68b68e964a9b43b50fc8ea387f719f56
|
81
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
82
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
83
|
+
|
84
|
+
eventfd: remove "_nonblock" interfaces
|
85
|
+
|
86
|
+
Instead, allow a nonblock flag to be passed to
|
87
|
+
EventFD#incr and EventFD#value so it matches other
|
88
|
+
interfaces.
|
89
|
+
|
90
|
+
commit aa78296c346c31ca6ee0846fe7b8e6c9dd78d764
|
91
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
92
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
93
|
+
|
94
|
+
TimerFD#expirations takes a nonblock flag
|
95
|
+
|
96
|
+
Just like Inotify#take
|
97
|
+
|
98
|
+
commit ea00a29e69bcfbcaa82ac24adb9fdfefeb9cde4c
|
99
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
100
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
101
|
+
|
102
|
+
eventfd: test EventFD::MAX value
|
103
|
+
|
104
|
+
commit 3e75c60006b42b2c4eff8c95f11c4289e8229bb1
|
105
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
106
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
107
|
+
|
108
|
+
eventfd: test for :SEMAPHORE semantics
|
109
|
+
|
110
|
+
commit fd1509a7854d0da1227964a562a5f344bc0569b5
|
111
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
112
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
113
|
+
|
114
|
+
signalfd: flesh out SignalFD#take with non-blocking
|
115
|
+
|
116
|
+
Not that it works well...
|
117
|
+
|
118
|
+
commit 157a3ca60a1b2bdab0f26ec631dcdcdcc29dc260
|
119
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
120
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
121
|
+
|
122
|
+
Inotify#take releases GVL unconditionally
|
123
|
+
|
124
|
+
Avoids using select(2) if we want blocking functionality on
|
125
|
+
Ruby 1.9.
|
126
|
+
|
127
|
+
commit 6d7785370afe03827612572bad95c6fd81f0864b
|
128
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
129
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
130
|
+
|
131
|
+
split out missing bits for older glibc and kernels
|
132
|
+
|
133
|
+
They could be useful for other projects.
|
134
|
+
|
135
|
+
commit 6ffe88ef9ca671485e0e9a174dda99ffde7611ce
|
136
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
137
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
138
|
+
|
139
|
+
cleanup blocking region code for 1.8
|
140
|
+
|
141
|
+
Just reuse 1.9 methods
|
142
|
+
|
143
|
+
commit 7ae6845bdaf1e969d42c6ff84c847b4a3263dae4
|
144
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
145
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
146
|
+
|
147
|
+
test_epoll_gc: disable expensive test by default
|
148
|
+
|
149
|
+
Not needed for most cases.
|
150
|
+
|
151
|
+
commit 1fd99f288140556f2f02333a6e01002a77d1bfdb
|
152
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
153
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
154
|
+
|
155
|
+
cleanup unneeded #define shortcuts
|
156
|
+
|
157
|
+
Never used anywhere
|
158
|
+
|
159
|
+
commit d5af4d2738bc47f9ecc30b0900400833077f022b
|
160
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
161
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
162
|
+
|
163
|
+
move set_nonblock() into util.c
|
164
|
+
|
165
|
+
No need to repeat it and bloat ourselves.
|
166
|
+
|
167
|
+
commit 601e98fa2f89b99c7349b5c010850dd6f4efba0b
|
168
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
169
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
170
|
+
|
171
|
+
timerfd: hook up TimerFD#gettime
|
172
|
+
|
173
|
+
Oops, it was never wired up.
|
174
|
+
|
175
|
+
commit 89986c2df21b94fec21e516c0f51f3e3584f5b2e
|
176
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
177
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
178
|
+
|
179
|
+
test_inotify: do not check 1.9 IO constants
|
180
|
+
|
181
|
+
None of our business.
|
182
|
+
|
183
|
+
commit f04b6e5d6e5ad7a5144e4a01f113f24af32c8d25
|
184
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
185
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
186
|
+
|
187
|
+
doc: improve RDoc documentation
|
188
|
+
|
189
|
+
Might as well, since it forces me to understand these
|
190
|
+
interfaces, too :)
|
191
|
+
|
192
|
+
commit 01d0b34524668a52261bc026b22bc74401db71b6
|
193
|
+
Author: Eric Wong <e@yhbt.net>
|
194
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
195
|
+
|
196
|
+
signalfd: test with sigqueue() with DL help
|
197
|
+
|
198
|
+
Still doesn't work under 1.8, oh well :<
|
199
|
+
|
200
|
+
commit 32bc376e494b5477b921b6d198b7aeda0c8efe12
|
201
|
+
Author: Eric Wong <e@yhbt.net>
|
202
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
203
|
+
|
204
|
+
rework flags passing for ease-of-use
|
205
|
+
|
206
|
+
Arguments now take symbols and arrays of symbols just like the
|
207
|
+
SignalFD.new method. This fixes some use of signed vs unsigned
|
208
|
+
integer conversions as well.
|
209
|
+
|
210
|
+
commit 39d900abaebcb82aa2f2766b692ef558d44a9349
|
211
|
+
Author: Eric Wong <e@yhbt.net>
|
212
|
+
Date: Thu Mar 10 02:12:46 2011 +0000
|
213
|
+
|
214
|
+
remove SLEEPY_PENGUIN_VERSION constant
|
215
|
+
|
216
|
+
Bad idea to rely on constants
|
217
|
+
|
218
|
+
commit e29be690d10747c09aaf4839a4a5a4a0ed11729a
|
219
|
+
Author: Eric Wong <e@yhbt.net>
|
220
|
+
Date: Sun Mar 6 02:17:57 2011 +0000
|
221
|
+
|
222
|
+
add SignalFD#update! method
|
223
|
+
|
224
|
+
This modifies an existing SignalFD.
|
225
|
+
|
226
|
+
commit f14855b5b746c6bb6c6edb0dada2803ab60c5b94
|
227
|
+
Author: Eric Wong <e@yhbt.net>
|
228
|
+
Date: Sun Mar 6 00:10:50 2011 +0000
|
229
|
+
|
230
|
+
signalfd: gets => take
|
231
|
+
|
232
|
+
For consistency with the inotify interface
|
233
|
+
|
234
|
+
commit b62672504cfed54fcfa22229e348385c5520210b
|
235
|
+
Author: Eric Wong <e@yhbt.net>
|
236
|
+
Date: Sat Mar 5 23:45:13 2011 +0000
|
237
|
+
|
238
|
+
disable epoll optimizations test if Strace::me is missing
|
239
|
+
|
240
|
+
Better than failing.
|
241
|
+
|
242
|
+
commit 61c072424483b9c963823e860f627ac3c67d5375
|
243
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
244
|
+
Date: Sun Mar 6 01:01:46 2011 +0000
|
245
|
+
|
246
|
+
remove TimerFD.create, it's redundant
|
247
|
+
|
248
|
+
Even though it matches timerfd_create(), TimerFD.new is
|
249
|
+
more consistent with the rest of the library.
|
250
|
+
|
251
|
+
commit 2706408dbeeb661eab82e0292cb004b68a13e8e1
|
252
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
253
|
+
Date: Sun Mar 6 00:33:43 2011 +0000
|
254
|
+
|
255
|
+
inotify: some rdoc and comments
|
256
|
+
|
257
|
+
commit 6a205437e7070b8476b876536b6a77e6041f288e
|
258
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
259
|
+
Date: Sat Mar 5 23:50:24 2011 +0000
|
260
|
+
|
261
|
+
inotify: use StringValueCStr for paths
|
262
|
+
|
263
|
+
This will fail on '\0' bytes since it's an illegal path
|
264
|
+
character.
|
265
|
+
|
266
|
+
commit e3798a8591f753706280b71c99ac8d0f2cfa393b
|
267
|
+
Author: Eric Wong <e@yhbt.net>
|
268
|
+
Date: Sat Mar 5 23:34:53 2011 +0000
|
269
|
+
|
270
|
+
add SignalFD interface
|
271
|
+
|
272
|
+
It's only working for Ruby 1.9 right now.
|
273
|
+
|
274
|
+
commit 9a19edb46e33f1385afefa13e1758b9263fa00d2
|
275
|
+
Author: Eric Wong <e@yhbt.net>
|
276
|
+
Date: Sat Mar 5 23:33:39 2011 +0000
|
277
|
+
|
278
|
+
add top-level SP shortcut constant
|
279
|
+
|
280
|
+
Taking a hint from EM :)
|
281
|
+
|
282
|
+
commit a1cd49832cf8273ad17f106a40c61a572f9e3bd5
|
283
|
+
Author: Eric Wong <e@yhbt.net>
|
284
|
+
Date: Sat Mar 5 23:20:01 2011 +0000
|
285
|
+
|
286
|
+
eventfd.c: fixes for Ruby 1.9
|
287
|
+
|
288
|
+
Oops :X
|
289
|
+
|
290
|
+
commit fd32ba797d5a3b2d404c46fd1ed89f20fc540dcc
|
291
|
+
Author: Eric Wong <normalperson@yhbt.net>
|
292
|
+
Date: Sun Feb 6 10:55:09 2011 +0000
|
293
|
+
|
294
|
+
pkg.mk: lib/ may not always exist
|
295
|
+
|
296
|
+
We could go C-only
|
297
|
+
|
3
298
|
commit bba86c017d101c365c5a22b8e2b734ff7216ce56
|
4
299
|
Author: Eric Wong <normalperson@yhbt.net>
|
5
300
|
Date: Fri Feb 4 22:24:59 2011 +0000
|
data/GIT-VERSION-FILE
CHANGED
@@ -1 +1 @@
|
|
1
|
-
GIT_VERSION =
|
1
|
+
GIT_VERSION = 2.0.0
|
data/GIT-VERSION-GEN
CHANGED
data/LATEST
CHANGED
@@ -1,8 +1,22 @@
|
|
1
|
-
=== sleepy_penguin
|
1
|
+
=== sleepy_penguin 2.0.0 / 2011-03-10 04:43 UTC
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
* Epoll.new no longer defaults to close-on-exec
|
3
|
+
There are many internal cleanups, bugfixes, and incompatible
|
4
|
+
API changes. The API will probably be stable from now on.
|
6
5
|
|
7
|
-
|
6
|
+
All the flag passing is less verbose, in the past you had
|
7
|
+
to do:
|
8
|
+
|
9
|
+
tfd = TimerFD.new(TimerFD::CLOEXEC|TimerFD::NONBLOCK)
|
10
|
+
|
11
|
+
Now, you can just do (the old way still works):
|
12
|
+
|
13
|
+
tfd = TimerFD.new([:CLOEXEC, :NONBLOCK])
|
14
|
+
|
15
|
+
A SignalFD interface now exists, but is not recommended since
|
16
|
+
MRI signal handling seems to conflict with it.
|
17
|
+
|
18
|
+
Inotify#close no longer holds the GVL while closing the
|
19
|
+
descriptor since it is an expensive operation.
|
20
|
+
|
21
|
+
See git log v1.4.0..v2.0.0 for all the gory details.
|
8
22
|
|
data/LICENSE
CHANGED
@@ -5,8 +5,8 @@ You can redistribute it and/or modify it under the terms of the GNU
|
|
5
5
|
Lesser General Public License (LGPL) as published by the Free Software
|
6
6
|
Foundation, version {2.1}[http://www.gnu.org/licenses/lgpl-2.1.txt] or
|
7
7
|
or {3}[http://www.gnu.org/licenses/lgpl-3.0.txt] (see link:COPYING).
|
8
|
-
The project leader (Eric Wong) reserves the right to relicense
|
9
|
-
under future versions of the LGPL.
|
8
|
+
The project leader (Eric Wong) reserves the right to relicense
|
9
|
+
sleepy_penguin under future versions of the LGPL.
|
10
10
|
|
11
11
|
sleepy_penguin is distributed in the hope that it will be useful, but
|
12
12
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
data/NEWS
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
=== sleepy_penguin 2.0.0 / 2011-03-10 04:43 UTC
|
2
|
+
|
3
|
+
There are many internal cleanups, bugfixes, and incompatible
|
4
|
+
API changes. The API will probably be stable from now on.
|
5
|
+
|
6
|
+
All the flag passing is less verbose, in the past you had
|
7
|
+
to do:
|
8
|
+
|
9
|
+
tfd = TimerFD.new(TimerFD::CLOEXEC|TimerFD::NONBLOCK)
|
10
|
+
|
11
|
+
Now, you can just do (the old way still works):
|
12
|
+
|
13
|
+
tfd = TimerFD.new([:CLOEXEC, :NONBLOCK])
|
14
|
+
|
15
|
+
A SignalFD interface now exists, but is not recommended since
|
16
|
+
MRI signal handling seems to conflict with it.
|
17
|
+
|
18
|
+
Inotify#close no longer holds the GVL while closing the
|
19
|
+
descriptor since it is an expensive operation.
|
20
|
+
|
21
|
+
See git log v1.4.0..v2.0.0 for all the gory details.
|
22
|
+
|
1
23
|
=== sleepy_penguin 1.4.0 - Linux I/O events for Ruby / 2011-02-04 22:27 UTC
|
2
24
|
|
3
25
|
* Epoll#wait: do not automatically retry on EINTR
|
data/README
CHANGED
@@ -2,21 +2,21 @@
|
|
2
2
|
|
3
3
|
sleepy_penguin provides access to newer, Linux-only system calls to wait
|
4
4
|
on events from traditionally non-I/O sources. Bindings to the eventfd,
|
5
|
-
timerfd, and epoll interfaces are provided.
|
5
|
+
timerfd, inotify, signalfd and epoll interfaces are provided.
|
6
6
|
|
7
7
|
== Features
|
8
8
|
|
9
9
|
* Thread-safe blocking operations under both Ruby 1.8 and 1.9.
|
10
10
|
|
11
|
-
* Mostly working under Rubinius
|
12
|
-
|
13
11
|
* IO-like objects are backwards-compatible with IO.select.
|
14
12
|
|
15
|
-
* Epoll interface is fork-safe
|
13
|
+
* Epoll interface is fork-safe and GC-safe
|
16
14
|
|
17
15
|
* Unlike portable event frameworks, the Linux-only Epoll interface
|
18
16
|
allows using edge-triggered I/O for possibly improved performance
|
19
17
|
|
18
|
+
* Fully-documented and user-friendly API
|
19
|
+
|
20
20
|
== Install
|
21
21
|
|
22
22
|
If you're using a packaged Ruby distribution, make sure you have a C
|