sysvmq 0.2.0 → 0.2.1

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: d566493d3060b35ef5d50756f2222e02e9e0e1ac
4
- data.tar.gz: 65f7630c46cad73ef1221d8997c37ad288376653
3
+ metadata.gz: 9b62bd6b368c988aa1821158c4a68eade4d2dd28
4
+ data.tar.gz: 1722201de77944fd64324927a0c681f08b700596
5
5
  SHA512:
6
- metadata.gz: 61deff9290193b8fd854d3218e85a6570d4864cc8019995834f4d9b869fbe6f34e88c194fd618864417aa61d186866dd673b4435acef5281afd5670e0cf3cbc7
7
- data.tar.gz: ff8ddcf9e22ffca17957d1d5109de66afe5c86f51c9fca5e46fc2461e2c5cfc097f55c50a4c75cc9098adc241876fa585ecec8c4be457fd1763cf2fd2197d5db
6
+ metadata.gz: 6810448b3b02f863bb4a0989d0b45b36693ecdb3ef68252a2beb5578367741910b5e7193d61307d65d7fe252e8c5dcdfe73995a4eb659ad2ba399f1f22ba2bec
7
+ data.tar.gz: e986084ee94f00982699a93cc67063a58d7f43db3c2e15b4d4d36bcd506cccfc25e2b386b77c49d6f92ff7f5fb4e3be1426b076296c9553e017fe5c88f2adf4a
data/.travis.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 1.9.3
3
4
  - 2.0.0
4
5
  - 2.1.0
data/README.md CHANGED
@@ -18,7 +18,7 @@ Add `sysvm` to your Gemfile.
18
18
 
19
19
  `gem 'sysvmq'`
20
20
 
21
- Currently known to work on Linux and OS X for MRI >= 2.0.
21
+ Currently known to work on Linux and OS X for MRI >= 1.9
22
22
 
23
23
  ## Usage
24
24
 
@@ -40,6 +40,29 @@ ensure
40
40
  mq.destroy
41
41
  ```
42
42
 
43
+ ## Proc settings
44
+
45
+ System V queues are limited by default to a maximum of 16 message queues, a maximum of 8KB per message, and a maximum of 16KB for the total size of all messages in a queue.
46
+
47
+ To increase (or decrease) these limits, either run:
48
+
49
+ ```sh
50
+ sysctl -w kernel.msgmni=32
51
+ sysctl -w kernel.msgmax=1000000
52
+ sysctl -w kernel.msgmnb=2000000
53
+ ```
54
+
55
+ or write to /etc/sysctl.conf:
56
+
57
+ ```sh
58
+ echo 'kernel.msgmni=32' >> /etc/sysctl.conf # maximum number of message queues
59
+ echo 'kernel.msgmax=1000000' >> /etc/sysctl.conf # maximum number of bytes per message
60
+ echo 'kernel.msgmnb=2000000' >> /etc/sysctl.conf # maximum total size of all messages in a queue
61
+ sysctl -p
62
+ ```
63
+
64
+ See http://man7.org/linux/man-pages/man5/proc.5.html for more information.
65
+
43
66
  ## Todo
44
67
 
45
68
  * Explain messages types
data/ext/extconf.rb CHANGED
@@ -1,5 +1,10 @@
1
1
  require 'mkmf'
2
+
2
3
  have_header 'sys/ipc.h'
3
4
  have_header 'sys/msg.h'
4
5
  have_header 'sys/types.h'
6
+
7
+ have_func 'rb_thread_blocking_region'
8
+ have_func 'rb_thread_call_without_gvl'
9
+
5
10
  create_makefile 'sysvmq'
data/ext/sysvmq.c CHANGED
@@ -1,6 +1,5 @@
1
1
  #include <ruby.h>
2
2
  #include <ruby/util.h>
3
- #include <ruby/thread.h>
4
3
  #include <ruby/io.h>
5
4
 
6
5
  #include <sys/types.h>
@@ -15,6 +14,20 @@
15
14
 
16
15
  #define UNINITIALIZED_ERROR -2
17
16
 
17
+ #if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL) && defined(HAVE_RUBY_THREAD_H)
18
+ // 2.0
19
+ #include <ruby/thread.h>
20
+ #define WITHOUT_GVL(fn,a,ubf,b) \
21
+ rb_thread_call_without_gvl((fn),(a),(ubf),(b))
22
+
23
+ #elif defined(HAVE_RB_THREAD_BLOCKING_REGION)
24
+ // 1.9
25
+ typedef VALUE (*my_blocking_fn_t)(void*);
26
+ #define WITHOUT_GVL(fn,a,ubf,b) \
27
+ rb_thread_blocking_region((my_blocking_fn_t)(fn),(a),(ubf),(b))
28
+
29
+ #endif
30
+
18
31
  // This is the buffer passed to msg{rcv,snd,ctl}(2)
19
32
  typedef struct {
20
33
  long mtype;
@@ -220,7 +233,7 @@ sysvmq_receive(int argc, VALUE *argv, VALUE self)
220
233
  // We unlock the GVL waiting for the call so other threads (e.g. signal
221
234
  // handling) can continue to work. Sets `length` on `blocking` with the size
222
235
  // of the message returned.
223
- while (rb_thread_call_without_gvl(sysvmq_maybe_blocking_receive, &blocking, RUBY_UBF_IO, NULL) == NULL
236
+ while (WITHOUT_GVL(sysvmq_maybe_blocking_receive, &blocking, RUBY_UBF_IO, NULL) == NULL
224
237
  && blocking.error < 0) {
225
238
  if (errno == EINTR || blocking.error == UNINITIALIZED_ERROR) {
226
239
  continue;
@@ -308,7 +321,7 @@ sysvmq_send(int argc, VALUE *argv, VALUE self)
308
321
  // msgsnd(2) can block waiting for a message, if IPC_NOWAIT is not passed.
309
322
  // We unlock the GVL waiting for the call so other threads (e.g. signal
310
323
  // handling) can continue to work.
311
- while (rb_thread_call_without_gvl(sysvmq_maybe_blocking_send, &blocking, RUBY_UBF_IO, NULL) == NULL
324
+ while (WITHOUT_GVL(sysvmq_maybe_blocking_send, &blocking, RUBY_UBF_IO, NULL) == NULL
312
325
  && blocking.error < 0) {
313
326
  if (errno == EINTR || blocking.error == UNINITIALIZED_ERROR) {
314
327
  continue;
data/sysvmq.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "sysvmq"
7
- spec.version = '0.2.0'
7
+ spec.version = '0.2.1'
8
8
  spec.authors = ["Simon Eskildsen"]
9
9
  spec.email = ["sirup@sirupsen.com"]
10
10
  spec.summary = %q{Ruby wrapper for SysV Message Queues}
data/test/sysv_mq_test.rb CHANGED
@@ -1,3 +1,4 @@
1
+ #coding: utf-8
1
2
  require_relative 'test_helper'
2
3
 
3
4
  class SysVMQTest < MiniTest::Unit::TestCase
@@ -52,7 +53,7 @@ class SysVMQTest < MiniTest::Unit::TestCase
52
53
  def test_sending_utf_should_report_correct_size_queue
53
54
  message = "ø" * 5
54
55
  @mq.send message
55
- assert_equal "ø".bytes.size * 5, @mq.stats[:size]
56
+ assert_equal "ø".bytes.to_a.size * 5, @mq.stats[:size]
56
57
  end
57
58
 
58
59
  def test_receive_on_empty_queue_raises_enomsg_if_ipc_nowait
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sysvmq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Eskildsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-10 00:00:00.000000000 Z
11
+ date: 2014-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler