sysvmq 0.2.0 → 0.2.1

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.
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