posix_mq 0.4.0 → 0.5.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 +1 -1
- data/.manifest +3 -3
- data/ChangeLog +33 -317
- data/Documentation/GNUmakefile +1 -1
- data/Documentation/{posix-mq.rb.1.txt → posix-mq-rb.1.txt} +7 -7
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +7 -6
- data/NEWS +12 -0
- data/README +1 -1
- data/bin/{posix-mq.rb → posix-mq-rb} +1 -1
- data/ext/posix_mq/posix_mq.c +16 -8
- data/lib/posix_mq.rb +2 -2
- data/man/man1/{posix-mq.rb.1 → posix-mq-rb.1} +7 -7
- data/posix_mq.gemspec +1 -1
- metadata +6 -6
data/.document
CHANGED
data/.manifest
CHANGED
@@ -5,7 +5,7 @@ COPYING
|
|
5
5
|
ChangeLog
|
6
6
|
Documentation/.gitignore
|
7
7
|
Documentation/GNUmakefile
|
8
|
-
Documentation/posix-mq
|
8
|
+
Documentation/posix-mq-rb.1.txt
|
9
9
|
GIT-VERSION-FILE
|
10
10
|
GIT-VERSION-GEN
|
11
11
|
GNUmakefile
|
@@ -13,12 +13,12 @@ LICENSE
|
|
13
13
|
NEWS
|
14
14
|
README
|
15
15
|
Rakefile
|
16
|
-
bin/posix-mq
|
16
|
+
bin/posix-mq-rb
|
17
17
|
ext/posix_mq/extconf.rb
|
18
18
|
ext/posix_mq/posix_mq.c
|
19
19
|
lib/posix_mq.rb
|
20
20
|
local.mk.sample
|
21
|
-
man/man1/posix-mq
|
21
|
+
man/man1/posix-mq-rb.1
|
22
22
|
posix_mq.gemspec
|
23
23
|
setup.rb
|
24
24
|
test/test_posix_mq.rb
|
data/ChangeLog
CHANGED
@@ -1,339 +1,55 @@
|
|
1
|
-
ChangeLog from git://git.bogomips.org/ruby_posix_mq.git ()
|
1
|
+
ChangeLog from git://git.bogomips.org/ruby_posix_mq.git (v0.4.0..v0.5.0)
|
2
2
|
|
3
|
-
commit
|
3
|
+
commit f3605c820fd73713e34950170bf759e1af204038
|
4
4
|
Author: Eric Wong <normalperson@yhbt.net>
|
5
|
-
Date:
|
5
|
+
Date: Tue May 4 19:48:18 2010 -0700
|
6
6
|
|
7
|
-
posix_mq 0.
|
7
|
+
posix_mq 0.5.0
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
Uncommonly raised exceptions due to programmer error are now
|
10
|
+
raised more safely with respect to the MRI garbage collector.
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
The "posix-mq.rb" executable has been renamed to "posix-mq-rb"
|
13
|
+
to respect RPS and is also hopefully easier to type/read when
|
14
|
+
used in scripts. I'm preserving the "rb" in the name since I
|
15
|
+
hope to have a more portable, C-only version someday.
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
* make POSIX_MQ#dup and POSIX_MQ#clone no-op
|
19
|
-
* do not release GVL for non-blocking operations
|
20
|
-
* do not release GVL when unlinking/opening
|
21
|
-
* POSIX_MQ#<< does not release GVL when non-blocking
|
22
|
-
* avoid shadow warnings
|
23
|
-
* README: add mailing list archives info
|
24
|
-
* POSIX_MQ#to_io works under FreeBSD, too
|
25
|
-
* fix potential race with notify(&block)
|
26
|
-
* add TODO item for using netlink under Linux
|
27
|
-
* remove non-portable #warning CPP directive
|
28
|
-
* ensure POSIX_MQ#name is clobber-proof
|
29
|
-
|
30
|
-
commit 437cbe78cb0f239e34f9dbf1341f5b85f96f2f25
|
31
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
32
|
-
Date: Sat Mar 13 00:22:22 2010 -0800
|
33
|
-
|
34
|
-
ensure POSIX_MQ#name is clobber-proof
|
35
|
-
|
36
|
-
We don't want folks to accidentally clobber the value for
|
37
|
-
others, so allocate a new string object for it (don't worry,
|
38
|
-
rb_str_dup() is cheap in 1.9).
|
39
|
-
|
40
|
-
commit 74e1f75b238416d9ac402f291431a5e457ae313f
|
41
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
42
|
-
Date: Sat Mar 13 00:08:37 2010 -0800
|
43
|
-
|
44
|
-
remove non-portable #warning CPP directive
|
45
|
-
|
46
|
-
There's a good chance they're not using GCC if they're on some
|
47
|
-
weird platform that we'd emit a warning for.
|
48
|
-
|
49
|
-
commit 9881f136858ac8f3a77a6cea8ce15b1cdb4ad55a
|
50
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
51
|
-
Date: Tue Mar 2 22:47:29 2010 -0800
|
52
|
-
|
53
|
-
add TODO item for using netlink under Linux
|
54
|
-
|
55
|
-
commit 19668b0edc9b09cfd72247f7041390e0328032a0
|
56
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
57
|
-
Date: Tue Mar 2 21:20:28 2010 -0800
|
58
|
-
|
59
|
-
fix potential race with notify(&block)
|
60
|
-
|
61
|
-
We need to assign the notify_thread before assigning the
|
62
|
-
notification. Otherwise, there's a chance the notification
|
63
|
-
could fire and the notify_thread is not properly assigned for
|
64
|
-
the POSIX_MQ object when the pipe becomes readable.
|
65
|
-
|
66
|
-
commit 0f4a8ef81479f9eff9037011d81b96cf402cbe7b
|
67
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
68
|
-
Date: Sat Feb 20 17:36:16 2010 -0800
|
69
|
-
|
70
|
-
POSIX_MQ#to_io works under FreeBSD, too
|
71
|
-
|
72
|
-
commit 44cd880c96a76d43f6dcc7f7cdf7f687e32bda0c
|
73
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
74
|
-
Date: Sat Feb 20 17:35:08 2010 -0800
|
75
|
-
|
76
|
-
README: add mailing list archives info
|
77
|
-
|
78
|
-
commit 4b56e475483454cd6616dd3c310c251940e9368b
|
79
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
80
|
-
Date: Sat Feb 20 17:19:52 2010 -0800
|
81
|
-
|
82
|
-
avoid shadow warnings
|
83
|
-
|
84
|
-
commit 97ef1cfd699640e40d2d63746d005f4f4cf6a863
|
85
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
86
|
-
Date: Sat Feb 20 14:52:16 2010 -0800
|
87
|
-
|
88
|
-
POSIX_MQ#<< does not release GVL when non-blocking
|
89
|
-
|
90
|
-
Missed this with the other change
|
91
|
-
|
92
|
-
commit 5849a3ca8e0691a7f39c5cdbfc09fc34ee4da308
|
93
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
94
|
-
Date: Sat Feb 20 14:46:04 2010 -0800
|
95
|
-
|
96
|
-
do not release GVL when unlinking/opening
|
97
|
-
|
98
|
-
Since the message queue is not actually on a (slow) block
|
99
|
-
device, it's unlikely to block in a way where other tasks may be
|
100
|
-
scheduled by the kernel. So avoid complicating things and
|
101
|
-
unnecessary task switching and assume mq_open/mq_unlink can
|
102
|
-
be executed as fast as the CPU/memory subsystems allows.
|
103
|
-
|
104
|
-
commit a90d0f97c9eb5d9683af09b60ef7af9e94a255c3
|
105
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
106
|
-
Date: Sat Feb 20 14:40:16 2010 -0800
|
107
|
-
|
108
|
-
do not release GVL for non-blocking operations
|
109
|
-
|
110
|
-
There's no point in wasting cycles releasing and reacquiring
|
111
|
-
a lock when we know we won't block. Since most non-blocking
|
112
|
-
users are expected to be single/few-threaded processes, this
|
113
|
-
will likely help them.
|
114
|
-
|
115
|
-
commit 67a59023164bc039129b34a742f06ba376687684
|
116
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
117
|
-
Date: Wed Feb 17 00:37:43 2010 -0800
|
118
|
-
|
119
|
-
make POSIX_MQ#dup and POSIX_MQ#clone no-op
|
120
|
-
|
121
|
-
It'll cause problems for the automatic mq_close() during GC
|
122
|
-
otherwise, as dup(2) on an mqd_t isn't portable.
|
123
|
-
|
124
|
-
Of course there's no point in cloning or duping, either, as
|
125
|
-
mq_send/mq_receive operations are always atomic at the kernel
|
126
|
-
level and only one thread can have a notification registered
|
127
|
-
for it.
|
128
|
-
|
129
|
-
commit 05e577616b74bea99a0e43e07f28823ddda1aaf9
|
130
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
131
|
-
Date: Sat Feb 13 03:39:17 2010 -0800
|
132
|
-
|
133
|
-
posix_mq 0.3.1
|
134
|
-
|
135
|
-
This fixes a misuse of the Ruby API leading to memory leaks in
|
136
|
-
cases where message queues are continually opened and closed
|
137
|
-
throughout the lifetime of the application.
|
138
|
-
|
139
|
-
Fortunately applications have little reason to repeatedly open
|
140
|
-
and close message queue descriptors: they are
|
141
|
-
multi-thread/multi-process-safe in every way imaginable and also
|
142
|
-
capable of non-blocking operation.
|
143
|
-
|
144
|
-
commit 9adbee0ab71bf408db5c3befb43b2bab0d86ebb2
|
145
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
146
|
-
Date: Sat Feb 13 03:30:44 2010 -0800
|
147
|
-
|
148
|
-
use GC correctly and avoid memory leaks
|
149
|
-
|
150
|
-
We still need to explicitly free the pointer we're given, and
|
151
|
-
not just close the associated file descriptor. Fortunately most
|
152
|
-
people to not spend all day opening/closing message queue
|
153
|
-
descriptors so this leak may not be noticeable.
|
154
|
-
|
155
|
-
commit c07cf2979036b9550566d59d6d4899be98f3e553
|
156
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
157
|
-
Date: Thu Jan 21 20:44:22 2010 -0800
|
158
|
-
|
159
|
-
add #shift test with destination buffer
|
17
|
+
Minor cleanups and documentation now uses RDoc 2.5.x
|
160
18
|
|
161
|
-
commit
|
19
|
+
commit f4d7d9d14cf65595aa3d98429a6732bd6b007b4a
|
162
20
|
Author: Eric Wong <normalperson@yhbt.net>
|
163
|
-
Date:
|
21
|
+
Date: Tue May 4 19:37:37 2010 -0700
|
164
22
|
|
165
|
-
|
23
|
+
doc: updates for RDoc 2.5.x
|
166
24
|
|
167
|
-
commit
|
25
|
+
commit 7b1b8a1cbbedc2764d4a8ab0d992f9f2ef73d9b7
|
168
26
|
Author: Eric Wong <normalperson@yhbt.net>
|
169
|
-
Date:
|
27
|
+
Date: Tue May 4 19:31:47 2010 -0700
|
170
28
|
|
171
|
-
|
29
|
+
rename `posix-mq.rb' executable to `posix-mq-rb'
|
172
30
|
|
173
|
-
|
174
|
-
|
175
|
-
|
31
|
+
".rb" in the executable name is discouraged by the
|
32
|
+
{Ruby packaging standard}[http://github.com/chneukirchen/rps]
|
33
|
+
and probably confusing.
|
176
34
|
|
177
|
-
|
178
|
-
|
179
|
-
This is only supported on platforms that implement
|
180
|
-
SIGEV_THREAD with mq_notify(3) (tested with glibc + Linux).
|
181
|
-
Other platforms will have to continue to rely on signal
|
182
|
-
notifications via POSIX#notify=signal, or IO notifications
|
183
|
-
in FreeBSD (and Linux).
|
184
|
-
|
185
|
-
* POSIX_MQ#shift([buffer [,timeout]])
|
186
|
-
Shorthand for the common "POSIX_MQ#receive.first"
|
187
|
-
when you do not care for priority of the received message.
|
188
|
-
|
189
|
-
Rev, EventMachine and Reactor support are planned for
|
190
|
-
Linux, FreeBSD and possibly any other platforms where POSIX
|
191
|
-
message queues are implemented with a file descriptor.
|
192
|
-
|
193
|
-
commit 2c71257b2b95e737088726ffc963b4e72f1b5455
|
194
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
195
|
-
Date: Sat Jan 9 22:49:49 2010 +0000
|
196
|
-
|
197
|
-
MRI 1.8 does not have rb_str_flush
|
198
|
-
|
199
|
-
It's Rubinius-specific and we use rb_str_resize
|
200
|
-
there anyways...
|
201
|
-
|
202
|
-
commit 531106e51e519458d37bed3721da4eff2f163206
|
203
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
204
|
-
Date: Fri Jan 8 11:30:49 2010 -0800
|
205
|
-
|
206
|
-
no point in non-blocking for fd notifications
|
207
|
-
|
208
|
-
It's not needed since the native thread will retry in the
|
209
|
-
unlikely case of EINTR/EAGAIN. And writing one byte to a pipe
|
210
|
-
that's guaranteed by POSIX to be at least 512 bytes is highly
|
211
|
-
unlikely.
|
212
|
-
|
213
|
-
It's also bad because F_SETFL takes the big kernel lock under
|
214
|
-
Linux (and possibly other systems), and doing it unnecessarily
|
215
|
-
is a waste of system cycles.
|
216
|
-
|
217
|
-
commit d03c76ae11ca6294e05262df747e4d43822ada73
|
218
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
219
|
-
Date: Fri Jan 8 11:25:06 2010 -0800
|
220
|
-
|
221
|
-
mode_t is usually unsigned
|
222
|
-
|
223
|
-
Most used open modes are well under INT_MAX, however
|
224
|
-
|
225
|
-
commit b3c31cf444e2ca3dae0f6d2370944bfbf3382d88
|
226
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
227
|
-
Date: Thu Jan 7 01:45:25 2010 -0800
|
228
|
-
|
229
|
-
add POSIX_MQ#shift helper method
|
230
|
-
|
231
|
-
This acts like POSIX_MQ#receive but only returns the message
|
232
|
-
without the priority.
|
233
|
-
|
234
|
-
commit 3700db51399e4949ed314ad0545d037b7762064e
|
235
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
236
|
-
Date: Thu Jan 7 09:28:57 2010 +0000
|
237
|
-
|
238
|
-
POSIX_MQ#notify only works on GNU/Linux for now
|
239
|
-
|
240
|
-
SIGEV_THREAD is not easy to implement, so many platforms
|
241
|
-
do not implement it.
|
242
|
-
|
243
|
-
commit 40d61f55ac53e3cd2f229d0b032da03032e3d53d
|
244
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
245
|
-
Date: Thu Jan 7 00:37:57 2010 -0800
|
246
|
-
|
247
|
-
POSIX_MQ#notify block execution on message received
|
248
|
-
|
249
|
-
This is implementation uses both a short-lived POSIX thread and
|
250
|
-
a pre-spawned Ruby Thread in a manner that works properly under
|
251
|
-
both Ruby 1.8 (green threads) and 1.9 (where Ruby Threads are
|
252
|
-
POSIX threads).
|
253
|
-
|
254
|
-
The short-lived POSIX thread will write a single "\0" byte to
|
255
|
-
a pipe the Ruby Thread waits on. This operation is atomic
|
256
|
-
on all platforms. Once the Ruby Thread is woken up from the
|
257
|
-
pipe, it will execute th block given to it.
|
258
|
-
|
259
|
-
This dual-thread implementation is inspired by the way glibc
|
260
|
-
implements mq_notify(3) + SIGEV_THREAD under Linux where the
|
261
|
-
kernel itself cannot directly spawn POSIX threads.
|
262
|
-
|
263
|
-
commit d8c8fb4155c1feea454abc3ed3f0a4b26e90be68
|
264
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
265
|
-
Date: Sun Jan 3 05:26:00 2010 +0000
|
266
|
-
|
267
|
-
fix warnings on platforms where mqd_t != int
|
268
|
-
|
269
|
-
The POSIX manpages specify the return values of all
|
270
|
-
mq_* functions besides mq_open(3) to be "int", not "mqd_t".
|
271
|
-
|
272
|
-
commit dbe5ed46e07b853e79e44141924a0166016e3e44
|
273
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
274
|
-
Date: Sat Jan 2 23:19:34 2010 -0800
|
275
|
-
|
276
|
-
bump GIT-VERSION-GEN
|
277
|
-
|
278
|
-
Shouldn't affect most people since they should just
|
279
|
-
take code from git...
|
35
|
+
If I ever get around to it, a non-Ruby version of this
|
36
|
+
executable is planned, and that will be called "posix-mq"
|
280
37
|
|
281
|
-
commit
|
38
|
+
commit 33368c839dc8c63489591bda6e60c78025be8852
|
282
39
|
Author: Eric Wong <normalperson@yhbt.net>
|
283
|
-
Date:
|
40
|
+
Date: Thu Apr 22 00:02:25 2010 -0700
|
284
41
|
|
285
|
-
|
286
|
-
|
287
|
-
This release fixes notification (un)registration and should be
|
288
|
-
fully-supported on modern FreeBSD (7.2+) releases.
|
42
|
+
GC safety fixes
|
289
43
|
|
290
|
-
|
291
|
-
|
292
|
-
functionality. Under FreeBSD, using IO.select on POSIX_MQ
|
293
|
-
objects is now possible as it has always been under Linux.
|
44
|
+
Avoid the RSTRING_PTR(rb_inspect(val)) construct, as it may not
|
45
|
+
preserve the value of rb_inspect() on the stack.
|
294
46
|
|
295
|
-
commit
|
47
|
+
commit a9a365326ea0f7a37852d25adfb03049c0b24c22
|
296
48
|
Author: Eric Wong <normalperson@yhbt.net>
|
297
|
-
Date:
|
49
|
+
Date: Wed Apr 21 23:58:25 2010 -0700
|
298
50
|
|
299
|
-
|
51
|
+
cleaner lookup "Signal" of constant
|
300
52
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
commit 26015d39e9c848a536b4ea44802f858a4e6e74f7
|
305
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
306
|
-
Date: Sun Jan 3 04:17:56 2010 +0000
|
307
|
-
|
308
|
-
fix build under FreeBSD 7.2
|
309
|
-
|
310
|
-
FreeBSD seems to need some files explicitly included.
|
311
|
-
|
312
|
-
commit e7ac70686b3c09953f6c41966dbd77f77368a9ec
|
313
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
314
|
-
Date: Sat Jan 2 21:19:58 2010 -0800
|
315
|
-
|
316
|
-
doc: FreeBSD-specific notes + example code
|
317
|
-
|
318
|
-
commit 6f24b5626f89fbb6445c0943ba71f56c8945e18f
|
319
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
320
|
-
Date: Sat Jan 2 20:41:39 2010 -0800
|
321
|
-
|
322
|
-
Fix mq.notify = nil to unregister notifications
|
323
|
-
|
324
|
-
"mq.notify = false" also works now, doing what
|
325
|
-
"mq.notify = nil" used to do (using SIGEV_NONE).
|
326
|
-
|
327
|
-
I was confused by SIGEV_NONE usage vs using a NULL pointer for
|
328
|
-
the notification passed mq_notify(3). SIGEV_NONE does not
|
329
|
-
actually unregister, it registers a no-op notification which
|
330
|
-
prevents other processes from taking us.
|
331
|
-
|
332
|
-
This also fixes the test case to pass under both Linux and
|
333
|
-
FreeBSD.
|
334
|
-
|
335
|
-
commit 522d4d1472c216bd95a16ca5b118bc14693aad64
|
336
|
-
Author: Eric Wong <normalperson@yhbt.net>
|
337
|
-
Date: Sat Jan 2 02:33:23 2010 -0800
|
338
|
-
|
339
|
-
initial commit
|
53
|
+
Instead of blindly defining a module, this is more flexible in
|
54
|
+
case Signal in Ruby itself becomes something other than a
|
55
|
+
module.
|
data/Documentation/GNUmakefile
CHANGED
@@ -5,7 +5,7 @@ PANDOC_OPTS = -f markdown --email-obfuscation=none --sanitize-html
|
|
5
5
|
pandoc = $(PANDOC) $(PANDOC_OPTS)
|
6
6
|
pandoc_html = $(pandoc) --toc -t html --no-wrap
|
7
7
|
|
8
|
-
man1 := $(addsuffix .1,posix-mq
|
8
|
+
man1 := $(addsuffix .1,posix-mq-rb)
|
9
9
|
html1 := $(addsuffix .html,$(man1))
|
10
10
|
|
11
11
|
all:: html man
|
@@ -1,14 +1,14 @@
|
|
1
|
-
% posix-mq
|
1
|
+
% posix-mq-rb(1) posix-mq-rb User Manual
|
2
2
|
% Ruby POSIX MQ hackers <ruby.posix.mq@librelist.com>
|
3
3
|
% Jan 1, 2010
|
4
4
|
|
5
5
|
# NAME
|
6
6
|
|
7
|
-
posix-mq
|
7
|
+
posix-mq-rb - command-line interface for POSIX message queues
|
8
8
|
|
9
9
|
# SYNOPSIS
|
10
10
|
|
11
|
-
MQUEUE=/name posix-mq
|
11
|
+
MQUEUE=/name posix-mq-rb COMMAND [*OPTIONS*] [*ARGUMENTS*]
|
12
12
|
|
13
13
|
# DESCRIPTION
|
14
14
|
|
@@ -75,7 +75,7 @@ The following command-line arguments are accepted:
|
|
75
75
|
|
76
76
|
-n, \--nonblock
|
77
77
|
: Exit immediately with error if the message queue is full.
|
78
|
-
Normally posix-mq
|
78
|
+
Normally posix-mq-rb(1) will block until the queue is writable or
|
79
79
|
interrupted. This may not be used in conjunction with \--timeout .
|
80
80
|
-t, \--timeout SECONDS
|
81
81
|
: Timeout and exit with error after SECONDS if the message queue is full.
|
@@ -96,7 +96,7 @@ The following command-line arguments are accepted:
|
|
96
96
|
|
97
97
|
-n, \--nonblock
|
98
98
|
: Exit immediately with error if the message queue is empty.
|
99
|
-
Normally posix-mq
|
99
|
+
Normally posix-mq-rb(1) will block until the queue is readable or
|
100
100
|
interrupted. This may not be used in conjunction with \--timeout .
|
101
101
|
-t, \--timeout SECONDS
|
102
102
|
: Timeout and exit with error after SECONDS if the message queue is empty.
|
@@ -111,9 +111,9 @@ The following command-line arguments are accepted:
|
|
111
111
|
|
112
112
|
# WAIT USAGE
|
113
113
|
|
114
|
-
The *wait* command will cause posix-mq
|
114
|
+
The *wait* command will cause posix-mq-rb(1) to sleep until a message is
|
115
115
|
available in the queue. Only one process may wait on an empty queue,
|
116
|
-
posix-mq
|
116
|
+
posix-mq-rb(1) will exit with an error if there is another waiting process.
|
117
117
|
|
118
118
|
It takes no arguments and accepts the following options:
|
119
119
|
|
data/GIT-VERSION-FILE
CHANGED
@@ -1 +1 @@
|
|
1
|
-
GIT_VERSION = 0.
|
1
|
+
GIT_VERSION = 0.5.0
|
data/GIT-VERSION-GEN
CHANGED
data/GNUmakefile
CHANGED
@@ -15,8 +15,9 @@ ifeq ($(RUBY_VERSION),)
|
|
15
15
|
RUBY_VERSION := $(shell $(RUBY) -e 'puts RUBY_VERSION')
|
16
16
|
endif
|
17
17
|
|
18
|
-
base_bins := posix-mq
|
18
|
+
base_bins := posix-mq-rb
|
19
19
|
bins := $(addprefix bin/, $(base_bins))
|
20
|
+
man1_rdoc := $(addsuffix _1, $(base_bins))
|
20
21
|
man1_bins := $(addsuffix .1, $(base_bins))
|
21
22
|
man1_paths := $(addprefix man/man1/, $(man1_bins))
|
22
23
|
|
@@ -57,7 +58,7 @@ NEWS: GIT-VERSION-FILE
|
|
57
58
|
$(RAKE) -s news_rdoc > $@+
|
58
59
|
mv $@+ $@
|
59
60
|
|
60
|
-
SINCE =
|
61
|
+
SINCE = 0.4.0
|
61
62
|
ChangeLog: LOG_VERSION = \
|
62
63
|
$(shell git rev-parse -q "$(GIT_VERSION)" >/dev/null 2>&1 && \
|
63
64
|
echo $(GIT_VERSION) || git describe)
|
@@ -75,10 +76,10 @@ cgit_atom := http://git.bogomips.org/cgit/ruby_posix_mq.git/atom/?h=master
|
|
75
76
|
atom = <link rel="alternate" title="Atom feed" href="$(1)" \
|
76
77
|
type="application/atom+xml"/>
|
77
78
|
|
78
|
-
# using rdoc 2.
|
79
|
+
# using rdoc 2.5.x+
|
79
80
|
doc: .document NEWS ChangeLog
|
80
|
-
for i in $(
|
81
|
-
rdoc -
|
81
|
+
for i in $(man1_rdoc); do > $$i; done
|
82
|
+
rdoc -a -t "$(shell sed -ne '1s/^= //p' README)"
|
82
83
|
install -m644 COPYING doc/COPYING
|
83
84
|
install -m644 $(shell grep '^[A-Z]' .document) doc/
|
84
85
|
$(MAKE) -C Documentation install-html install-man
|
@@ -95,7 +96,7 @@ doc: .document NEWS ChangeLog
|
|
95
96
|
doc/NEWS.html doc/README.html
|
96
97
|
$(RAKE) -s news_atom > doc/NEWS.atom.xml
|
97
98
|
cd doc && ln README.html tmp && mv tmp index.html
|
98
|
-
$(RM) $(
|
99
|
+
$(RM) $(man1_rdoc)
|
99
100
|
|
100
101
|
ifneq ($(VERSION),)
|
101
102
|
rfproject := qrp
|
data/NEWS
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
=== 0.5.0 / 2010-05-05 02:54 UTC
|
2
|
+
|
3
|
+
Uncommonly raised exceptions due to programmer error are now
|
4
|
+
raised more safely with respect to the MRI garbage collector.
|
5
|
+
|
6
|
+
The "posix-mq.rb" executable has been renamed to "posix-mq-rb"
|
7
|
+
to respect RPS and is also hopefully easier to type/read when
|
8
|
+
used in scripts. I'm preserving the "rb" in the name since I
|
9
|
+
hope to have a more portable, C-only version someday.
|
10
|
+
|
11
|
+
Minor cleanups and documentation now uses RDoc 2.5.x
|
12
|
+
|
1
13
|
=== 0.4.0 / 2010-03-13 09:44 UTC
|
2
14
|
|
3
15
|
Small bugfixes and small API changes to avoid potential
|
data/README
CHANGED
data/ext/posix_mq/posix_mq.c
CHANGED
@@ -10,6 +10,10 @@
|
|
10
10
|
#endif
|
11
11
|
#include <ruby.h>
|
12
12
|
|
13
|
+
#ifndef RB_GC_GUARD
|
14
|
+
# define RB_GC_GUARD(v) (*(volatile VALUE *)&(v))
|
15
|
+
#endif
|
16
|
+
|
13
17
|
#include <time.h>
|
14
18
|
#include <mqueue.h>
|
15
19
|
#include <fcntl.h>
|
@@ -247,9 +251,11 @@ static void attr_from_struct(struct mq_attr *attr, VALUE astruct, int all)
|
|
247
251
|
{
|
248
252
|
VALUE *ptr;
|
249
253
|
|
250
|
-
if (CLASS_OF(astruct) != cAttr)
|
254
|
+
if (CLASS_OF(astruct) != cAttr) {
|
255
|
+
RB_GC_GUARD(astruct) = rb_inspect(astruct);
|
251
256
|
rb_raise(rb_eArgError, "not a POSIX_MQ::Attr: %s",
|
252
|
-
RSTRING_PTR(
|
257
|
+
RSTRING_PTR(astruct));
|
258
|
+
}
|
253
259
|
|
254
260
|
ptr = RSTRUCT_PTR(astruct);
|
255
261
|
|
@@ -305,10 +311,12 @@ static VALUE init(int argc, VALUE *argv, VALUE self)
|
|
305
311
|
x.oflags = O_CREAT|O_WRONLY;
|
306
312
|
else if (oflags == sym_rw)
|
307
313
|
x.oflags = O_CREAT|O_RDWR;
|
308
|
-
else
|
314
|
+
else {
|
315
|
+
RB_GC_GUARD(oflags) = oflags;
|
309
316
|
rb_raise(rb_eArgError,
|
310
317
|
"symbol must be :r, :w, or :rw: %s",
|
311
|
-
RSTRING_PTR(
|
318
|
+
RSTRING_PTR(oflags));
|
319
|
+
}
|
312
320
|
break;
|
313
321
|
case T_BIGNUM:
|
314
322
|
case T_FIXNUM:
|
@@ -348,8 +356,9 @@ static VALUE init(int argc, VALUE *argv, VALUE self)
|
|
348
356
|
case T_NIL:
|
349
357
|
break;
|
350
358
|
default:
|
359
|
+
RB_GC_GUARD(attr) = rb_inspect(attr);
|
351
360
|
rb_raise(rb_eArgError, "attr must be a POSIX_MQ::Attr: %s",
|
352
|
-
RSTRING_PTR(
|
361
|
+
RSTRING_PTR(attr));
|
353
362
|
}
|
354
363
|
|
355
364
|
mq->des = (mqd_t)xopen(&x);
|
@@ -702,7 +711,7 @@ static int lookup_sig(VALUE sig)
|
|
702
711
|
sig = rb_str_new(ptr + 3, len - 3);
|
703
712
|
|
704
713
|
if (!list) {
|
705
|
-
VALUE mSignal =
|
714
|
+
VALUE mSignal = rb_const_get(rb_cObject, rb_intern("Signal"));
|
706
715
|
|
707
716
|
list = rb_funcall(mSignal, rb_intern("list"), 0, 0);
|
708
717
|
rb_global_variable(&list);
|
@@ -710,8 +719,7 @@ static int lookup_sig(VALUE sig)
|
|
710
719
|
|
711
720
|
sig = rb_hash_aref(list, sig);
|
712
721
|
if (NIL_P(sig))
|
713
|
-
rb_raise(rb_eArgError, "invalid signal: %s\n",
|
714
|
-
RSTRING_PTR(rb_inspect(sig)));
|
722
|
+
rb_raise(rb_eArgError, "invalid signal: %s\n", ptr);
|
715
723
|
|
716
724
|
return NUM2INT(sig);
|
717
725
|
}
|
data/lib/posix_mq.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
2
|
class POSIX_MQ
|
3
3
|
|
4
|
-
# version of POSIX_MQ, currently 0.
|
5
|
-
VERSION = '0.
|
4
|
+
# version of POSIX_MQ, currently 0.5.0
|
5
|
+
VERSION = '0.5.0'
|
6
6
|
|
7
7
|
# An analogous Struct to "struct mq_attr" in C.
|
8
8
|
# This may be used in arguments for POSIX_MQ.new and
|
@@ -1,10 +1,10 @@
|
|
1
|
-
.TH posix-mq
|
1
|
+
.TH posix-mq-rb 1 "Jan 1, 2010" "posix-mq-rb User Manual"
|
2
2
|
.SH NAME
|
3
3
|
.PP
|
4
|
-
posix-mq
|
4
|
+
posix-mq-rb - command-line interface for POSIX message queues
|
5
5
|
.SH SYNOPSIS
|
6
6
|
.PP
|
7
|
-
MQUEUE=/name posix-mq
|
7
|
+
MQUEUE=/name posix-mq-rb COMMAND [\f[I]OPTIONS\f[]]
|
8
8
|
[\f[I]ARGUMENTS\f[]]
|
9
9
|
.SH DESCRIPTION
|
10
10
|
.PP
|
@@ -81,7 +81,7 @@ The following command-line arguments are accepted:
|
|
81
81
|
.TP
|
82
82
|
.B -n, --nonblock
|
83
83
|
Exit immediately with error if the message queue is full.
|
84
|
-
Normally posix-mq
|
84
|
+
Normally posix-mq-rb(1) will block until the queue is writable or
|
85
85
|
interrupted.
|
86
86
|
This may not be used in conjunction with --timeout \&.
|
87
87
|
.RS
|
@@ -113,7 +113,7 @@ The following command-line arguments are accepted:
|
|
113
113
|
.TP
|
114
114
|
.B -n, --nonblock
|
115
115
|
Exit immediately with error if the message queue is empty.
|
116
|
-
Normally posix-mq
|
116
|
+
Normally posix-mq-rb(1) will block until the queue is readable or
|
117
117
|
interrupted.
|
118
118
|
This may not be used in conjunction with --timeout \&.
|
119
119
|
.RS
|
@@ -139,9 +139,9 @@ following format:
|
|
139
139
|
\f[]
|
140
140
|
.SH WAIT USAGE
|
141
141
|
.PP
|
142
|
-
The \f[I]wait\f[] command will cause posix-mq
|
142
|
+
The \f[I]wait\f[] command will cause posix-mq-rb(1) to sleep until
|
143
143
|
a message is available in the queue.
|
144
|
-
Only one process may wait on an empty queue, posix-mq
|
144
|
+
Only one process may wait on an empty queue, posix-mq-rb(1) will
|
145
145
|
exit with an error if there is another waiting process.
|
146
146
|
.PP
|
147
147
|
It takes no arguments and accepts the following options:
|
data/posix_mq.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.date = Time.now.utc.strftime('%Y-%m-%d')
|
13
13
|
s.description = File.read("README").split(/\n\n/)[1]
|
14
14
|
s.email = %q{ruby.posix.mq@librelist.com}
|
15
|
-
s.executables = %w(posix-mq
|
15
|
+
s.executables = %w(posix-mq-rb)
|
16
16
|
s.extensions = %w(ext/posix_mq/extconf.rb)
|
17
17
|
|
18
18
|
s.extra_rdoc_files = File.readlines('.document').map! do |x|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: posix_mq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ruby POSIX MQ hackers
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-05-05 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -19,7 +19,7 @@ description: |-
|
|
19
19
|
message queues, but provides similar functionality.
|
20
20
|
email: ruby.posix.mq@librelist.com
|
21
21
|
executables:
|
22
|
-
- posix-mq
|
22
|
+
- posix-mq-rb
|
23
23
|
extensions:
|
24
24
|
- ext/posix_mq/extconf.rb
|
25
25
|
extra_rdoc_files:
|
@@ -37,7 +37,7 @@ files:
|
|
37
37
|
- ChangeLog
|
38
38
|
- Documentation/.gitignore
|
39
39
|
- Documentation/GNUmakefile
|
40
|
-
- Documentation/posix-mq
|
40
|
+
- Documentation/posix-mq-rb.1.txt
|
41
41
|
- GIT-VERSION-FILE
|
42
42
|
- GIT-VERSION-GEN
|
43
43
|
- GNUmakefile
|
@@ -45,12 +45,12 @@ files:
|
|
45
45
|
- NEWS
|
46
46
|
- README
|
47
47
|
- Rakefile
|
48
|
-
- bin/posix-mq
|
48
|
+
- bin/posix-mq-rb
|
49
49
|
- ext/posix_mq/extconf.rb
|
50
50
|
- ext/posix_mq/posix_mq.c
|
51
51
|
- lib/posix_mq.rb
|
52
52
|
- local.mk.sample
|
53
|
-
- man/man1/posix-mq
|
53
|
+
- man/man1/posix-mq-rb.1
|
54
54
|
- posix_mq.gemspec
|
55
55
|
- setup.rb
|
56
56
|
- test/test_posix_mq.rb
|