sleepy_penguin 1.4.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|