posix-mqueue 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ae9a5d3100496b7f88cb7e4945612486fcbbb2e
4
- data.tar.gz: 616ca77fa4263904a3bafc37006a37ecfacffb01
3
+ metadata.gz: 5823cff6537672e41ae0166a4107bc262f6f5dc2
4
+ data.tar.gz: 00686b89630f12eed8b9d701417fda1e43825ea4
5
5
  SHA512:
6
- metadata.gz: be4c7b435842ed7a6e05b9d31fa43802d676dc46c772c1a23d131181c488e8d3a2feb93a97be6313dd6f104cd15b961d194ef0c75a72effba838435879c1a2d2
7
- data.tar.gz: 540803a81b08a973861e824b11f358e3231a4c3e302d6e9e4fdab5ca8c0f3f7f024363316f72b4ff7feb42ef30e04a535575cef497909678118181e27caf2007
6
+ metadata.gz: f00ad53969f1edd82ffc56275ff7994d55991dfd52fb772f11493861e8d6cac68cfa0b38ce1ccc211464f319283ea75c98db3083baf4a875bfac39b5d6d86a83
7
+ data.tar.gz: 1eb694b40bc7c4ccd1c82797b59ac1834adcbb923d94bd0dc4592613fb82b7cea962a7f43c81f08c0fa8907dd9ae40d1e9d34132b4f447d9eb1d574843f5cf59
@@ -15,6 +15,7 @@ VALUE rb_cQueueEmpty = Qnil;
15
15
 
16
16
  typedef struct {
17
17
  mqd_t fd;
18
+ VALUE io;
18
19
  struct mq_attr attr;
19
20
  size_t queue_len;
20
21
  char *queue;
@@ -24,6 +25,8 @@ mqueue_t;
24
25
  static void
25
26
  mqueue_mark(void* ptr)
26
27
  {
28
+ mqueue_t* data = ptr;
29
+ rb_gc_mark(data->io);
27
30
  (void)ptr;
28
31
  }
29
32
 
@@ -33,6 +36,8 @@ mqueue_free(void* ptr)
33
36
  mqueue_t* data = ptr;
34
37
  mq_close(data->fd);
35
38
  xfree(data->queue);
39
+ // ??
40
+ // xfree(data->io);
36
41
  xfree(ptr);
37
42
  }
38
43
 
@@ -86,8 +91,8 @@ VALUE posix_mqueue_send(VALUE self, VALUE message)
86
91
 
87
92
  TypedData_Get_Struct(self, mqueue_t, &mqueue_type, data);
88
93
 
89
- if (!RB_TYPE_P(message, T_STRING)) {
90
- rb_raise(rb_eTypeError, "Message must be a string");
94
+ if (!RB_TYPE_P(message, T_STRING)) {
95
+ rb_raise(rb_eTypeError, "Message must be a string");
91
96
  }
92
97
 
93
98
  rb_io_wait_writable(data->fd);
@@ -102,7 +107,7 @@ VALUE posix_mqueue_send(VALUE self, VALUE message)
102
107
  if (err < 0) {
103
108
  rb_sys_fail("Message sending failed, please consult mq_send(3)");
104
109
  }
105
-
110
+
106
111
  return Qtrue;
107
112
  }
108
113
 
@@ -122,12 +127,12 @@ VALUE posix_mqueue_timedreceive(VALUE self, VALUE args)
122
127
 
123
128
  TypedData_Get_Struct(self, mqueue_t, &mqueue_type, data);
124
129
 
125
- if (!RB_TYPE_P(seconds, T_FIXNUM)) {
126
- rb_raise(rb_eTypeError, "First argument must be a Fixnum");
130
+ if (!RB_TYPE_P(seconds, T_FIXNUM)) {
131
+ rb_raise(rb_eTypeError, "First argument must be a Fixnum");
127
132
  }
128
133
 
129
- if (!RB_TYPE_P(nanoseconds, T_FIXNUM)) {
130
- rb_raise(rb_eTypeError, "Second argument must be a Fixnum");
134
+ if (!RB_TYPE_P(nanoseconds, T_FIXNUM)) {
135
+ rb_raise(rb_eTypeError, "Second argument must be a Fixnum");
131
136
  }
132
137
 
133
138
  timeout.tv_sec = FIX2ULONG(seconds);
@@ -169,16 +174,16 @@ VALUE posix_mqueue_timedsend(VALUE self, VALUE args)
169
174
 
170
175
  TypedData_Get_Struct(self, mqueue_t, &mqueue_type, data);
171
176
 
172
- if (!RB_TYPE_P(message, T_STRING)) {
173
- rb_raise(rb_eTypeError, "Message must be a string");
177
+ if (!RB_TYPE_P(message, T_STRING)) {
178
+ rb_raise(rb_eTypeError, "Message must be a string");
174
179
  }
175
180
 
176
181
  if (!RB_TYPE_P(seconds, T_FIXNUM)) {
177
- rb_raise(rb_eTypeError, "First argument must be a Fixnum");
182
+ rb_raise(rb_eTypeError, "First argument must be a Fixnum");
178
183
  }
179
184
 
180
- if (!RB_TYPE_P(nanoseconds, T_FIXNUM)) {
181
- rb_raise(rb_eTypeError, "Second argument must be a Fixnum");
185
+ if (!RB_TYPE_P(nanoseconds, T_FIXNUM)) {
186
+ rb_raise(rb_eTypeError, "Second argument must be a Fixnum");
182
187
  }
183
188
 
184
189
  timeout.tv_sec = FIX2ULONG(seconds);
@@ -193,7 +198,7 @@ VALUE posix_mqueue_timedsend(VALUE self, VALUE args)
193
198
  rb_sys_fail("Message sending failed, please consult mq_send(3)");
194
199
  }
195
200
  }
196
-
201
+
197
202
  return Qtrue;
198
203
  }
199
204
 
@@ -211,6 +216,14 @@ VALUE posix_mqueue_size(VALUE self)
211
216
  return INT2FIX(queue.mq_curmsgs);
212
217
  }
213
218
 
219
+ VALUE posix_mqueue_to_io(VALUE self)
220
+ {
221
+ mqueue_t* data;
222
+ TypedData_Get_Struct(self, mqueue_t, &mqueue_type, data);
223
+
224
+ return data->io;
225
+ }
226
+
214
227
  VALUE posix_mqueue_msgsize(VALUE self)
215
228
  {
216
229
  mqueue_t* data;
@@ -259,14 +272,30 @@ VALUE posix_mqueue_receive(VALUE self)
259
272
  return str;
260
273
  }
261
274
 
262
- VALUE posix_mqueue_initialize(VALUE self, VALUE args)
275
+ VALUE posix_mqueue_initialize(int argc, VALUE* argv, VALUE self)
263
276
  {
264
- VALUE options = rb_ary_entry(args, 1);
265
- if (options == Qnil) options = rb_hash_new();
277
+ if(argc < 1)
278
+ {
279
+ rb_raise(rb_eArgError, "initialize requires at least one argument");
280
+ }
281
+
282
+ VALUE queue = argv[0];
283
+ if (!RB_TYPE_P(queue, T_STRING)) {
284
+ rb_raise(rb_eTypeError, "Queue name must be a string");
285
+ }
286
+
287
+ VALUE options;
288
+ if (argc < 2)
289
+ {
290
+ options = rb_hash_new();
291
+ }
292
+ else
293
+ {
294
+ options = argv[1];
295
+ }
266
296
 
267
297
  int msgsize = FIX2INT(rb_hash_lookup2(options, ID2SYM(rb_intern("msgsize")), INT2FIX(4096)));
268
298
  int maxmsg = FIX2INT(rb_hash_lookup2(options, ID2SYM(rb_intern("maxmsg")), INT2FIX(10)));
269
- VALUE queue = rb_ary_entry(args, 0);
270
299
 
271
300
  struct mq_attr attr = {
272
301
  .mq_flags = 0, // Flags, 0 or O_NONBLOCK
@@ -292,6 +321,11 @@ VALUE posix_mqueue_initialize(VALUE self, VALUE args)
292
321
  rb_sys_fail("Failed opening the message queue, please consult mq_open(3)");
293
322
  }
294
323
 
324
+ VALUE args[1];
325
+ args[0] = INT2FIX(data->fd);
326
+
327
+ data->io = rb_class_new_instance(1, args, rb_path2class("IO"));
328
+
295
329
  return self;
296
330
  }
297
331
 
@@ -303,7 +337,7 @@ void Init_mqueue()
303
337
  rb_cQueueEmpty = rb_define_class_under(mqueue, "QueueEmpty", rb_eStandardError);
304
338
 
305
339
  rb_define_alloc_func(mqueue, posix_mqueue_alloc);
306
- rb_define_method(mqueue, "initialize", posix_mqueue_initialize, -2);
340
+ rb_define_method(mqueue, "initialize", posix_mqueue_initialize, -1);
307
341
  rb_define_method(mqueue, "send", posix_mqueue_send, 1);
308
342
  rb_define_method(mqueue, "receive", posix_mqueue_receive, 0);
309
343
  rb_define_method(mqueue, "timedsend", posix_mqueue_timedsend, -2);
@@ -311,5 +345,6 @@ void Init_mqueue()
311
345
  rb_define_method(mqueue, "msgsize", posix_mqueue_msgsize, 0);
312
346
  rb_define_method(mqueue, "size", posix_mqueue_size, 0);
313
347
  rb_define_method(mqueue, "unlink", posix_mqueue_unlink, 0);
348
+ rb_define_method(mqueue, "to_io", posix_mqueue_to_io, 0);
314
349
  }
315
350
 
@@ -1,5 +1,5 @@
1
1
  module POSIX
2
2
  class Mqueue
3
- VERSION = "0.0.6"
3
+ VERSION = "0.0.7"
4
4
  end
5
5
  end
@@ -71,7 +71,7 @@ class MqueueTest < MiniTest::Unit::TestCase
71
71
 
72
72
  # Set to the maximum for Linux
73
73
  with_queue "/big-queue", msgsize: 2 ** 13 do |q|
74
- assert_equal 2 ** 13, q.msgsiza
74
+ assert_equal 2 ** 13, q.msgsize
75
75
 
76
76
  q.send('c' * (2 ** 13))
77
77
  end
@@ -97,6 +97,10 @@ class MqueueTest < MiniTest::Unit::TestCase
97
97
  assert_equal 3, @queue.size
98
98
  end
99
99
 
100
+ def test_to_io
101
+ assert_instance_of IO, @queue.to_io
102
+ end
103
+
100
104
  private
101
105
  def with_queue(name, options = {})
102
106
  queue = POSIX::Mqueue.new(name, options)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posix-mqueue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Eskildsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-02 00:00:00.000000000 Z
11
+ date: 2013-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler