posix_mq 2.1.0 → 2.2.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cd61a0174a8b5bc70e3c7f7dba0a3192ed5c3a4f
4
+ data.tar.gz: 33d0325cd7b5804755ef3ab663e71acaa22d4171
5
+ SHA512:
6
+ metadata.gz: df3e903bd7fcd24583a3a7202d565ba83963974d071dc5a292ad3451324ed95e538ad20a50552cc5a3c28c9680cbe3d736be82fd6d975b9a308f94899d28759a
7
+ data.tar.gz: 06c68326b0514f8ca43d2ade5621bee95d62f11526779715f6b1a0732e01c038fe906c58c8b887aa09cb7034ce97c957227f051743fd5a5fae599c14c4934679
data/.document CHANGED
@@ -1,8 +1,6 @@
1
1
  README
2
2
  LICENSE
3
3
  NEWS
4
- ChangeLog
5
4
  lib
6
5
  ext/posix_mq/posix_mq.c
7
6
  posix-mq-rb_1
8
- LATEST
data/.gitignore CHANGED
@@ -5,8 +5,7 @@
5
5
  Makefile
6
6
  /GIT-VERSION-FILE
7
7
  /local.mk
8
- /NEWS
9
- /ChangeLog
8
+ /NEWS*
10
9
  /.manifest
11
10
  /GIT-VERSION-FILE
12
11
  /man
@@ -14,3 +13,4 @@ Makefile
14
13
  /doc
15
14
  /LATEST
16
15
  /tmp
16
+ *_1
@@ -2,6 +2,9 @@
2
2
  rdoc_url: http://bogomips.org/ruby_posix_mq/
3
3
  cgit_url: http://bogomips.org/ruby_posix_mq.git
4
4
  git_url: git://bogomips.org/ruby_posix_mq.git
5
+ public_email: ruby-posix-mq@bogomips.org
6
+ private_email: bofh@bogomips.org
7
+ ml_url: http://bogomips.org/ruby-posix-mq/
5
8
  changelog_since: 0.4.0
6
9
  merge_html:
7
10
  posix-mq-rb_1: Documentation/posix-mq-rb.1.html
@@ -1,7 +1,7 @@
1
1
  all::
2
2
 
3
3
  PANDOC = pandoc
4
- PANDOC_OPTS = -f markdown --email-obfuscation=none --sanitize-html
4
+ PANDOC_OPTS = -f markdown --email-obfuscation=none
5
5
  pandoc = $(PANDOC) $(PANDOC_OPTS)
6
6
  pandoc_html = $(pandoc) --toc -t html --no-wrap
7
7
 
@@ -1,5 +1,5 @@
1
1
  % posix-mq-rb(1) posix-mq-rb User Manual
2
- % Ruby POSIX MQ hackers <ruby.posix.mq@librelist.com>
2
+ % Ruby POSIX MQ hackers <ruby-posix-mq@bogomips.org>
3
3
  % Jan 1, 2010
4
4
 
5
5
  # NAME
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v2.1.0
4
+ DEF_VER=v2.2.0
5
5
 
6
6
  LF='
7
7
  '
@@ -1,15 +1,7 @@
1
1
  all::
2
+ PLACEHOLDERS = posix-mq-rb_1
2
3
  RSYNC_DEST := bogomips.org:/srv/bogomips/ruby_posix_mq
3
- rfproject := qrp
4
4
  rfpackage := posix_mq
5
- man-rdoc: man html
6
- for i in $(man1_rdoc); do echo > $$i; done
7
- doc:: man-rdoc
8
- include pkg.mk
9
- ifneq ($(VERSION),)
10
- release::
11
- $(RAKE) publish_news VERSION=$(VERSION)
12
- endif
13
5
 
14
6
  base_bins := posix-mq-rb
15
7
  bins := $(addprefix bin/, $(base_bins))
@@ -24,8 +16,9 @@ man html:
24
16
  $(MAKE) -C Documentation install-$@
25
17
 
26
18
  pkg_extra += $(man1_paths)
19
+ $(man1_paths): man
20
+ include pkg.mk
27
21
 
28
22
  doc::
29
23
  install -m644 COPYING-GPL2 doc/COPYING-GPL2
30
- $(RM) $(man1_rdoc)
31
24
  .PHONY: man html
data/LICENSE CHANGED
@@ -3,13 +3,11 @@ revision control for names and email addresses of all of them.
3
3
 
4
4
  You can redistribute it and/or modify it either under the terms of the GNU
5
5
  Lesser General Public License as published by the Free Software Foundation,
6
- version 3.0 {LGPLv3}[http://www.gnu.org/licenses/lgpl-3.0.txt] (see
7
- link:COPYING) or version 2 of the GNU General Public License
8
- {GPLv2}[http://www.gnu.org/licenses/gpl-2.0.txt] (see link:COPYING-GPL2).
6
+ version 3.0 or later {LGPLv3+}[https://www.gnu.org/licenses/lgpl-3.0.txt]
7
+ (see link:COPYING).
9
8
 
10
- The project leader {Eric Wong}[mailto:normalperson@yhbt.net] reserves
11
- the right to upgrade the project license to future versions of the LGPL
12
- (but no other licenses).
9
+ It is also available under the GNU General Public License
10
+ {GPLv2}[https://www.gnu.org/licenses/gpl-2.0.txt] (see link:COPYING-GPL2).
13
11
 
14
12
  Ruby posix_mq is distributed in the hope that it will be useful, but
15
13
  WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,5 +15,5 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
17
15
  General Public License for more details.
18
16
 
19
17
  You should have received a copy of the GNU Lesser General Public License
20
- along with Ruby posix_mq; if not, write to the Free Software
21
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
18
+ along with Ruby posix_mq; if not, see:
19
+ https://www.gnu.org/licenses/lgpl-3.0.txt
data/README CHANGED
@@ -23,10 +23,10 @@ network-aware message queue implementations.
23
23
 
24
24
  * Optional timeouts may be applied to send and receive operations.
25
25
 
26
- * Thread-safe blocking operations under Ruby 1.9, releases GVL
26
+ * Thread-safe blocking operations under Ruby 1.9+, releases GVL
27
27
  before blocking operations.
28
28
 
29
- * Works under Ruby 1.8, Ruby 1.9 and Rubinius 1.2
29
+ * Works under Ruby 1.9 and later.
30
30
 
31
31
  * Documented library API
32
32
 
@@ -113,7 +113,7 @@ don't email the git mailing list or maintainer with Ruby posix_mq patches.
113
113
  == Contact
114
114
 
115
115
  All feedback (bug reports, user/development discussion, patches, pull
116
- requests) go to the mailing list: mailto:ruby.posix.mq@librelist.com
116
+ requests) go to the mailing list: mailto:ruby-posix-mq@bogomips.org
117
117
 
118
118
  Send patches (from "git format-patch") with "git send-email" and do not
119
119
  send HTML email or attachments. We are very responsive to email and you
@@ -121,10 +121,38 @@ will usually get a response within 24-72 hours.
121
121
 
122
122
  == Mailing List Archives
123
123
 
124
- In addition to the rsync-able archives provided by http://librelist.com/, we
125
- are also mirrored to
126
- {Gmane}[http://gmane.org/info.php?group=gmane.comp.lang.ruby.posix-mq.general]
127
- and maintain our own mbox mirrors downloadable via HTTP.
124
+ We operate a {public-inbox}[http://public-inbox.org/] which
125
+ feeds the mailing list. You may subscribe either using
126
+ {ssoma}[http://ssoma.public-inbox.org/] or by sending a mail
127
+ to mailto:ruby-posix-mq+subscribe@bogomips.org
128
128
 
129
- * nntp://news.gmane.org/gmane.comp.lang.ruby.posix-mq.general
130
- * http://bogomips.org/ruby_posix_mq/archives/
129
+ ssoma is a mail archiver/fetcher using git. It operates in a similar
130
+ fashion to tools such as slrnpull, fetchmail, or getmail. ssoma
131
+ subscription instructions:
132
+
133
+ URL=git://bogomips.org/ruby-posix-mq
134
+ LISTNAME=ruby-posix-mq
135
+
136
+ # to initialize a maildir (this may be a new or existing maildir,
137
+ # ssoma will not touch existing messages)
138
+ # If you prefer mbox, use mbox:/path/to/mbox as the last argument
139
+ # You may also use imap://$MAILSERVER/INBOX for an IMAP account
140
+ # or imaps:// for an IMAPS account, as well.
141
+ ssoma add $LISTNAME $URL maildir:/path/to/maildir
142
+
143
+ # read with your favorite MUA (only using mutt as an example)
144
+ mutt -f /path/to/maildir # (or /path/to/mbox)
145
+
146
+ # to keep your mbox or maildir up-to-date, periodically run:
147
+ ssoma sync $LISTNAME
148
+
149
+ # your MUA may modify and delete messages from the maildir or mbox,
150
+ # this does not affect ssoma functionality at all
151
+
152
+ # to sync all your ssoma subscriptions
153
+ ssoma sync
154
+
155
+ # You may wish to sync in your cronjob
156
+ ssoma sync --cron
157
+
158
+ * Mailing list archives: http://bogomips.org/ruby-posix-mq/
@@ -0,0 +1,3 @@
1
+ /data
2
+ /news
3
+ /requests
@@ -0,0 +1,4 @@
1
+ # group_name max expire headers_only
2
+ gmane.comp.lang.ruby.posix-mq.general 1000000000 1000000000 0
3
+
4
+ # usage: slrnpull -d $PWD -h news.gmane.org --no-post
@@ -26,6 +26,7 @@
26
26
 
27
27
  #if defined(__linux__)
28
28
  # define MQD_TO_FD(mqd) (int)(mqd)
29
+ # define FD_TO_MQD(fd) (mqd_t)(fd)
29
30
  #elif defined(HAVE___MQ_OSHANDLE) /* FreeBSD */
30
31
  # define MQD_TO_FD(mqd) __mq_oshandle(mqd)
31
32
  #else
@@ -33,10 +34,12 @@
33
34
  # define MQ_IO_SET(mq,val) ((void)(0))
34
35
  # define MQ_IO_CLOSE(mq) ((int)(0))
35
36
  # define MQ_IO_NIL_P(mq) ((int)(1))
37
+ # define MQ_IO_SET_AUTOCLOSE(mq, boolean) for(;0;)
36
38
  #endif
37
39
 
38
40
  struct posix_mq {
39
41
  mqd_t des;
42
+ unsigned autoclose:1;
40
43
  struct mq_attr attr;
41
44
  VALUE name;
42
45
  VALUE thread;
@@ -46,9 +49,17 @@ struct posix_mq {
46
49
  };
47
50
 
48
51
  #ifdef MQD_TO_FD
52
+ static ID id_setautoclose;
49
53
  # define MQ_IO_MARK(mq) rb_gc_mark((mq)->io)
50
54
  # define MQ_IO_SET(mq,val) do { (mq)->io = (val); } while (0)
51
55
  # define MQ_IO_NIL_P(mq) NIL_P((mq)->io)
56
+
57
+ static void MQ_IO_SET_AUTOCLOSE(struct posix_mq *mq, VALUE boolean)
58
+ {
59
+ if (!NIL_P(mq->io))
60
+ rb_funcall(mq->io, id_setautoclose, 1, boolean);
61
+ }
62
+
52
63
  static int MQ_IO_CLOSE(struct posix_mq *mq)
53
64
  {
54
65
  if (NIL_P(mq->io))
@@ -139,13 +150,13 @@ struct open_args {
139
150
  /* used to pass arguments to mq_send/mq_receive inside blocking region */
140
151
  struct rw_args {
141
152
  mqd_t des;
153
+ unsigned msg_prio;
142
154
  union {
143
155
  ssize_t received;
144
156
  int retval;
145
157
  };
146
158
  char *msg_ptr;
147
159
  size_t msg_len;
148
- unsigned msg_prio;
149
160
  struct timespec *timeout;
150
161
  };
151
162
 
@@ -299,7 +310,8 @@ static void _free(void *ptr)
299
310
 
300
311
  if (mq->des != MQD_INVALID && MQ_IO_NIL_P(mq)) {
301
312
  /* we ignore errors when gc-ing */
302
- mq_close(mq->des);
313
+ if (mq->autoclose)
314
+ mq_close(mq->des);
303
315
  errno = 0;
304
316
  }
305
317
  xfree(ptr);
@@ -312,6 +324,7 @@ static VALUE alloc(VALUE klass)
312
324
  VALUE rv = Data_Make_Struct(klass, struct posix_mq, mark, _free, mq);
313
325
 
314
326
  mq->des = MQD_INVALID;
327
+ mq->autoclose = 1;
315
328
  mq->attr.mq_flags = 0;
316
329
  mq->attr.mq_maxmsg = 0;
317
330
  mq->attr.mq_msgsize = -1;
@@ -365,6 +378,37 @@ static void rstruct2mqattr(struct mq_attr *attr, VALUE astruct, int all)
365
378
  attr->mq_curmsgs = NUM2LONG(tmp);
366
379
  }
367
380
 
381
+ #ifdef FD_TO_MQD
382
+ /*
383
+ * call-seq:
384
+ * POSIX_MQ.for_fd(socket) => mq
385
+ *
386
+ * Adopts a socket as a POSIX message queue. Argument will be
387
+ * checked to ensure it is a POSIX message queue socket.
388
+ *
389
+ * This is useful for adopting systemd sockets passed via the
390
+ * ListenMessageQueue directive.
391
+ * Returns a +POSIX_MQ+ instance. This method is only available
392
+ * under Linux and FreeBSD and is not intended to be portable.
393
+ *
394
+ */
395
+ static VALUE for_fd(VALUE klass, VALUE socket)
396
+ {
397
+ VALUE mqv = alloc(klass);
398
+ struct posix_mq *mq = get(mqv, 0);
399
+ mqd_t mqd;
400
+
401
+ mq->name = Qnil;
402
+ mqd = FD_TO_MQD(NUM2INT(socket));
403
+
404
+ if (mq_getattr(mqd, &mq->attr) < 0)
405
+ rb_sys_fail("provided file descriptor is not a POSIX MQ");
406
+
407
+ mq->des = mqd;
408
+ return mqv;
409
+ }
410
+ #endif /* FD_TO_MQD */
411
+
368
412
  /*
369
413
  * call-seq:
370
414
  * POSIX_MQ.new(name [, flags [, mode [, mq_attr]]) => mq
@@ -486,7 +530,7 @@ static VALUE s_unlink(VALUE self, VALUE name)
486
530
  {
487
531
  int rv = mq_unlink(StringValueCStr(name));
488
532
 
489
- if (rv == -1)
533
+ if (rv < 0)
490
534
  rb_sys_fail("mq_unlink");
491
535
 
492
536
  return INT2NUM(1);
@@ -507,10 +551,14 @@ static VALUE _unlink(VALUE self)
507
551
  struct posix_mq *mq = get(self, 0);
508
552
  int rv;
509
553
 
554
+ if (NIL_P(mq->name)) {
555
+ rb_raise(rb_eArgError, "can not unlink an adopted socket");
556
+ }
557
+
510
558
  assert(TYPE(mq->name) == T_STRING && "mq->name is not a string");
511
559
 
512
560
  rv = mq_unlink(RSTRING_PTR(mq->name));
513
- if (rv == -1)
561
+ if (rv < 0)
514
562
  rb_sys_fail("mq_unlink");
515
563
 
516
564
  return self;
@@ -559,7 +607,7 @@ static VALUE _send(int sflags, int argc, VALUE *argv, VALUE self)
559
607
 
560
608
  retry:
561
609
  WITHOUT_GVL(xsend, &x, RUBY_UBF_IO, 0);
562
- if (x.retval == -1) {
610
+ if (x.retval < 0) {
563
611
  if (errno == EINTR)
564
612
  goto retry;
565
613
  if (errno == EAGAIN && (sflags & PMQ_TRY))
@@ -593,7 +641,7 @@ static VALUE send0(VALUE self, VALUE buffer)
593
641
 
594
642
  retry:
595
643
  WITHOUT_GVL(xsend, &x, RUBY_UBF_IO, 0);
596
- if (x.retval == -1) {
644
+ if (x.retval < 0) {
597
645
  if (errno == EINTR)
598
646
  goto retry;
599
647
  rb_sys_fail("mq_send");
@@ -615,9 +663,13 @@ static VALUE to_io(VALUE self)
615
663
  struct posix_mq *mq = get(self, 1);
616
664
  int fd = MQD_TO_FD(mq->des);
617
665
 
618
- if (NIL_P(mq->io))
666
+ if (NIL_P(mq->io)) {
619
667
  mq->io = rb_funcall(rb_cIO, id_new, 1, INT2NUM(fd));
620
668
 
669
+ if (!mq->autoclose)
670
+ rb_funcall(mq->io, id_setautoclose, 1, Qfalse);
671
+ }
672
+
621
673
  return mq->io;
622
674
  }
623
675
  #endif
@@ -775,7 +827,7 @@ static VALUE _close(VALUE self)
775
827
  struct posix_mq *mq = get(self, 1);
776
828
 
777
829
  if (! MQ_IO_CLOSE(mq)) {
778
- if (mq_close(mq->des) == -1)
830
+ if (mq_close(mq->des) < 0)
779
831
  rb_sys_fail("mq_close");
780
832
  }
781
833
  mq->des = MQD_INVALID;
@@ -807,6 +859,15 @@ static VALUE name(VALUE self)
807
859
  {
808
860
  struct posix_mq *mq = get(self, 0);
809
861
 
862
+ if (NIL_P(mq->name)) {
863
+ /*
864
+ * We could use readlink(2) on /proc/self/fd/N, but lots of
865
+ * care required.
866
+ * http://stackoverflow.com/questions/1188757/
867
+ */
868
+ rb_raise(rb_eArgError, "can not get name of an adopted socket");
869
+ }
870
+
810
871
  return rb_str_dup(mq->name);
811
872
  }
812
873
 
@@ -853,12 +914,12 @@ static void my_mq_notify(mqd_t des, struct sigevent *not)
853
914
  {
854
915
  int rv = mq_notify(des, not);
855
916
 
856
- if (rv == -1) {
917
+ if (rv < 0) {
857
918
  if (errno == ENOMEM) {
858
919
  rb_gc();
859
920
  rv = mq_notify(des, not);
860
921
  }
861
- if (rv == -1)
922
+ if (rv < 0)
862
923
  rb_sys_fail("mq_notify");
863
924
  }
864
925
  }
@@ -1019,6 +1080,36 @@ static VALUE setnonblock(VALUE self, VALUE nb)
1019
1080
  return nb;
1020
1081
  }
1021
1082
 
1083
+ /*
1084
+ * call-seq:
1085
+ * mq.autoclose = boolean => boolean
1086
+ *
1087
+ * Determines whether or not the _mq_ will be closed automatically
1088
+ * at finalization.
1089
+ */
1090
+ static VALUE setautoclose(VALUE self, VALUE autoclose)
1091
+ {
1092
+ struct posix_mq *mq = get(self, 1);
1093
+
1094
+ MQ_IO_SET_AUTOCLOSE(mq, autoclose);
1095
+ mq->autoclose = RTEST(autoclose) ? 1 : 0;
1096
+ return autoclose;
1097
+ }
1098
+
1099
+ /*
1100
+ * call-seq:
1101
+ * mq.autoclose? => boolean
1102
+ *
1103
+ * Returns whether or not the _mq_ will be closed automatically
1104
+ * at finalization.
1105
+ */
1106
+ static VALUE autoclose_p(VALUE self)
1107
+ {
1108
+ struct posix_mq *mq = get(self, 1);
1109
+
1110
+ return mq->autoclose ? Qtrue : Qfalse;
1111
+ }
1112
+
1022
1113
  /*
1023
1114
  * call-seq:
1024
1115
  * mq.trysend(string [,priority[, timeout]]) => +true+ or +false+
@@ -1110,10 +1201,17 @@ void Init_posix_mq_ext(void)
1110
1201
  rb_define_private_method(cPOSIX_MQ, "notify_exec", setnotify_exec, 2);
1111
1202
  rb_define_private_method(cPOSIX_MQ, "notify_cleanup", notify_cleanup, 0);
1112
1203
  rb_define_method(cPOSIX_MQ, "nonblock?", nonblock_p, 0);
1204
+ rb_define_method(cPOSIX_MQ, "autoclose?", autoclose_p, 0);
1205
+ rb_define_method(cPOSIX_MQ, "autoclose=", setautoclose, 1);
1113
1206
  #ifdef MQD_TO_FD
1114
1207
  rb_define_method(cPOSIX_MQ, "to_io", to_io, 0);
1115
1208
  #endif
1116
1209
 
1210
+ #ifdef FD_TO_MQD
1211
+ rb_define_module_function(cPOSIX_MQ, "for_fd", for_fd, 1);
1212
+ id_setautoclose = rb_intern("autoclose=");
1213
+ #endif
1214
+
1117
1215
  id_new = rb_intern("new");
1118
1216
  id_kill = rb_intern("kill");
1119
1217
  id_fileno = rb_intern("fileno");
@@ -41,7 +41,7 @@ class POSIX_MQ
41
41
  # SIGEV_THREAD functionality in mq_notify(3). So far we only
42
42
  # know of glibc + Linux supporting this. Please let us
43
43
  # know if your platform can support this functionality and
44
- # are willing to test for us <ruby.posix.mq@librelist.com>
44
+ # are willing to test for us <ruby-posix-mq@bogomips.org>
45
45
  #
46
46
  # As far as we can tell, this method is not very useful
47
47
  # nor efficient. You would be better served using signals or
data/pkg.mk CHANGED
@@ -1,7 +1,8 @@
1
1
  RUBY = ruby
2
2
  RAKE = rake
3
3
  RSYNC = rsync
4
- WRONGDOC = wrongdoc
4
+ OLDDOC = olddoc
5
+ RDOC = rdoc
5
6
 
6
7
  GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
7
8
  @./GIT-VERSION-GEN
@@ -12,14 +13,6 @@ RUBY_VERSION := $(shell $(RUBY) -e 'puts RUBY_VERSION')
12
13
  RUBY_ENGINE := $(shell $(RUBY) -e 'puts((RUBY_ENGINE rescue "ruby"))')
13
14
  lib := lib
14
15
 
15
- ifeq ($(shell test -f script/isolate_for_tests && echo t),t)
16
- isolate_libs := tmp/isolate/$(RUBY_ENGINE)-$(RUBY_VERSION)/isolate.mk
17
- $(isolate_libs): script/isolate_for_tests
18
- @$(RUBY) script/isolate_for_tests
19
- -include $(isolate_libs)
20
- lib := $(lib):$(ISOLATE_LIBS)
21
- endif
22
-
23
16
  ext := $(firstword $(wildcard ext/*))
24
17
  ifneq ($(ext),)
25
18
  ext_pfx := tmp/ext/$(RUBY_ENGINE)-$(RUBY_VERSION)
@@ -36,7 +29,7 @@ $(ext_pfx)/$(ext)/%: $(ext)/% $(ext_d)
36
29
  install -m 644 $< $@
37
30
  $(ext_pfx)/$(ext)/Makefile: $(ext)/extconf.rb $(ext_d) $(ext_h)
38
31
  $(RM) -f $(@D)/*.o
39
- cd $(@D) && $(RUBY) $(CURDIR)/$(ext)/extconf.rb
32
+ cd $(@D) && $(RUBY) $(CURDIR)/$(ext)/extconf.rb $(EXTCONF_ARGS)
40
33
  ext_sfx := _ext.$(DLEXT)
41
34
  ext_dl := $(ext_pfx)/$(ext)/$(notdir $(ext)_ext.$(DLEXT))
42
35
  $(ext_dl): $(ext_src) $(ext_pfx_src) $(ext_pfx)/$(ext)/Makefile
@@ -48,10 +41,10 @@ else
48
41
  build:
49
42
  endif
50
43
 
51
- pkg_extra += GIT-VERSION-FILE NEWS ChangeLog LATEST
52
- ChangeLog: GIT-VERSION-FILE .wrongdoc.yml
53
- $(WRONGDOC) prepare
54
- NEWS LATEST: ChangeLog
44
+ pkg_extra += GIT-VERSION-FILE NEWS LATEST
45
+ NEWS: GIT-VERSION-FILE .olddoc.yml
46
+ $(OLDDOC) prepare
47
+ LATEST: NEWS
55
48
 
56
49
  manifest:
57
50
  $(RM) .manifest
@@ -63,28 +56,20 @@ manifest:
63
56
  cmp $@+ $@ || mv $@+ $@
64
57
  $(RM) $@+
65
58
 
66
- doc:: .document .wrongdoc.yml $(pkg_extra)
59
+ doc:: .document .olddoc.yml $(pkg_extra) $(PLACEHOLDERS)
67
60
  -find lib -type f -name '*.rbc' -exec rm -f '{}' ';'
68
61
  -find ext -type f -name '*.rbc' -exec rm -f '{}' ';'
69
62
  $(RM) -r doc
70
- $(WRONGDOC) all
63
+ $(RDOC) -f oldweb
64
+ $(OLDDOC) merge
71
65
  install -m644 COPYING doc/COPYING
66
+ install -m644 NEWS doc/NEWS
67
+ install -m644 NEWS.atom.xml doc/NEWS.atom.xml
72
68
  install -m644 $(shell LC_ALL=C grep '^[A-Z]' .document) doc/
73
69
 
74
70
  ifneq ($(VERSION),)
75
71
  pkggem := pkg/$(rfpackage)-$(VERSION).gem
76
72
  pkgtgz := pkg/$(rfpackage)-$(VERSION).tgz
77
- release_notes := release_notes-$(VERSION)
78
- release_changes := release_changes-$(VERSION)
79
-
80
- release-notes: $(release_notes)
81
- release-changes: $(release_changes)
82
- $(release_changes):
83
- $(WRONGDOC) release_changes > $@+
84
- $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
85
- $(release_notes):
86
- $(WRONGDOC) release_notes > $@+
87
- $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
88
73
 
89
74
  # ensures we're actually on the tagged $(VERSION), only used for release
90
75
  verify:
@@ -120,31 +105,18 @@ $(pkgtgz): manifest fix-perms
120
105
 
121
106
  package: $(pkgtgz) $(pkggem)
122
107
 
123
- test-release:: verify package $(release_notes) $(release_changes)
124
- # make tgz release on RubyForge
125
- @echo rubyforge add_release -f \
126
- -n $(release_notes) -a $(release_changes) \
127
- $(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
128
- @echo gem push $(pkggem)
129
- @echo rubyforge add_file \
130
- $(rfproject) $(rfpackage) $(VERSION) $(pkggem)
131
- release:: verify package $(release_notes) $(release_changes)
132
- # make tgz release on RubyForge
133
- rubyforge add_release -f -n $(release_notes) -a $(release_changes) \
134
- $(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
108
+ release:: verify package
135
109
  # push gem to RubyGems.org
136
110
  gem push $(pkggem)
137
- # in case of gem downloads from RubyForge releases page
138
- rubyforge add_file \
139
- $(rfproject) $(rfpackage) $(VERSION) $(pkggem)
140
111
  else
141
112
  gem install-gem: GIT-VERSION-FILE
142
113
  $(MAKE) $@ VERSION=$(GIT_VERSION)
143
114
  endif
144
115
 
145
- all:: test
116
+ all:: check
146
117
  test_units := $(wildcard test/test_*.rb)
147
- test: test-unit
118
+ test: check
119
+ check: test-unit
148
120
  test-unit: $(test_units)
149
121
  $(test_units): build
150
122
  $(RUBY) -I $(lib) $@ $(RUBY_TEST_OPTS)
@@ -154,8 +126,6 @@ ifneq ($(RSYNC_DEST),)
154
126
  publish_doc:
155
127
  -git set-file-times
156
128
  $(MAKE) doc
157
- find doc/images -type f | \
158
- TZ=UTC xargs touch -d '1970-01-01 00:00:06' doc/rdoc.css
159
129
  $(MAKE) doc_gz
160
130
  $(RSYNC) -av doc/ $(RSYNC_DEST)/
161
131
  git ls-files | xargs touch
@@ -163,7 +133,7 @@ endif
163
133
 
164
134
  # Create gzip variants of the same timestamp as the original so nginx
165
135
  # "gzip_static on" can serve the gzipped versions directly.
166
- doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.\(gif\|jpg\|png\|gz\)$$')
136
+ doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.gz$$')
167
137
  doc_gz:
168
138
  for i in $(docs); do \
169
139
  gzip --rsyncable -9 < $$i > $$i.gz; touch -r $$i $$i.gz; done
@@ -171,5 +141,10 @@ check-warnings:
171
141
  @(for i in $$(git ls-files '*.rb'| grep -v '^setup\.rb$$'); \
172
142
  do $(RUBY) -d -W2 -c $$i; done) | grep -v '^Syntax OK$$' || :
173
143
 
174
- .PHONY: all .FORCE-GIT-VERSION-FILE doc test $(test_units) manifest
144
+ ifneq ($(PLACEHOLDERS),)
145
+ $(PLACEHOLDERS):
146
+ echo olddoc_placeholder > $@
147
+ endif
148
+
149
+ .PHONY: all .FORCE-GIT-VERSION-FILE doc check test $(test_units) manifest
175
150
  .PHONY: check-warnings
@@ -1,27 +1,23 @@
1
1
  # -*- encoding: binary -*-
2
2
  ENV["VERSION"] or abort "VERSION= must be specified"
3
3
  manifest = File.readlines('.manifest').map! { |x| x.chomp! }
4
- require 'wrongdoc'
5
- extend Wrongdoc::Gemspec
4
+ require 'olddoc'
5
+ extend Olddoc::Gemspec
6
6
  name, summary, title = readme_metadata
7
7
 
8
8
  Gem::Specification.new do |s|
9
9
  s.name = %q{posix_mq}
10
10
  s.version = ENV["VERSION"].dup
11
11
  s.authors = ["Ruby POSIX MQ hackers"]
12
- s.date = Time.now.utc.strftime('%Y-%m-%d')
13
12
  s.description = readme_description
14
- s.email = %q{ruby.posix.mq@librelist.com}
13
+ s.email = %q{ruby-posix-mq@bogomips.org}
15
14
  s.executables = %w(posix-mq-rb)
16
15
  s.extensions = %w(ext/posix_mq/extconf.rb)
17
16
  s.extra_rdoc_files = extra_rdoc_files(manifest)
18
17
  s.files = manifest
19
- s.homepage = Wrongdoc.config[:rdoc_url]
18
+ s.homepage = Olddoc.config['rdoc_url']
20
19
  s.summary = summary
21
- s.rdoc_options = rdoc_options
22
- s.rubyforge_project = %q{qrp}
23
20
  s.test_files = manifest.grep(%r{\Atest/test_.*\.rb\z})
24
- s.add_development_dependency(%q<wrongdoc>, "~> 1.5")
25
-
26
- # s.licenses = %w(LGPLv3) # accessor not compatible with older RubyGems
21
+ s.add_development_dependency(%q<olddoc>, "~> 1.0")
22
+ s.licenses = %w(GPL-2.0 LGPL-3.0+)
27
23
  end
@@ -3,11 +3,6 @@ require 'test/unit'
3
3
  require 'thread'
4
4
  require 'fcntl'
5
5
  $stderr.sync = $stdout.sync = true
6
- require "dl"
7
- begin
8
- require "dl/func"
9
- rescue LoadError
10
- end
11
6
  $-w = true
12
7
  require 'posix_mq'
13
8
 
@@ -17,6 +12,8 @@ class Test_POSIX_MQ < Test::Unit::TestCase
17
12
  warn "POSIX_MQ#to_io not supported on this platform: #{RUBY_PLATFORM}"
18
13
  POSIX_MQ.method_defined?(:notify) or
19
14
  warn "POSIX_MQ#notify not supported on this platform: #{RUBY_PLATFORM}"
15
+ POSIX_MQ.respond_to?(:for_fd) or
16
+ warn "POSIX_MQ::for_fd not supported on this platform: #{RUBY_PLATFORM}"
20
17
 
21
18
  def setup
22
19
  @mq = nil
@@ -102,23 +99,15 @@ class Test_POSIX_MQ < Test::Unit::TestCase
102
99
  assert elapsed < 1.10, elapsed.inspect
103
100
  end
104
101
 
105
- def test_alarm_signal_safe
106
- libc = alarm = nil
107
- libcs = %w(libc.so.6 libc.so.0.1 libc.so.7 /usr/lib/libc.sl)
108
- libcs.each do |name|
109
- libc = DL::Handle.new(name) rescue next
110
- if defined?(DL::Function)
111
- alarm = libc["alarm"]
112
- alarm = DL::CFunc.new(alarm, DL::TYPE_INT, "alarm")
113
- alarm = DL::Function.new(alarm, [DL::TYPE_INT])
114
- else
115
- alarm = libc["alarm", "II"]
102
+ def test_signal_safe
103
+ alarm = lambda do |x|
104
+ Thread.new(x) do |time|
105
+ sleep(time)
106
+ Process.kill(:USR1, $$)
116
107
  end
117
- break
118
108
  end
119
- alarm or return warn "alarm() not found in #{libcs.inspect}"
120
109
  alarms = 0
121
- trap("ALRM") do
110
+ sig = trap(:USR1) do
122
111
  alarms += 1
123
112
  Thread.new { @mq.send("HI") }
124
113
  end
@@ -133,6 +122,8 @@ class Test_POSIX_MQ < Test::Unit::TestCase
133
122
  assert elapsed >= interval, elapsed.inspect
134
123
  assert elapsed < 1.10, elapsed.inspect
135
124
  assert_equal 1, alarms
125
+ ensure
126
+ trap(:USR1, sig) if sig
136
127
  end
137
128
 
138
129
  def test_timed_send
@@ -244,6 +235,37 @@ class Test_POSIX_MQ < Test::Unit::TestCase
244
235
  assert_nothing_raised { IO.select([@mq], nil, nil, 0) }
245
236
  end if POSIX_MQ.method_defined?(:to_io)
246
237
 
238
+ def test_for_fd
239
+ buf = ""
240
+ @mq = POSIX_MQ.new @path, IO::CREAT|IO::RDWR, 0666
241
+ @alt = POSIX_MQ.for_fd(@mq.to_io.to_i)
242
+ assert_equal true, @mq.send("hello", 0)
243
+ assert_equal [ "hello", 0 ], @alt.receive(buf)
244
+ assert_equal "hello", buf
245
+ assert_equal @mq.to_io.to_i, @alt.to_io.to_i
246
+ assert_raises(ArgumentError) { @alt.name }
247
+ assert_raises(Errno::EBADF) { POSIX_MQ.for_fd(1) }
248
+ @alt.autoclose = false
249
+ assert_equal false, @alt.autoclose?
250
+
251
+ # iterate a bunch and hope GC kicks in
252
+ fd = @mq.to_io.fileno
253
+ 10_000.times do
254
+ mq = POSIX_MQ.for_fd(fd)
255
+ assert_equal true, mq.autoclose?
256
+ mq.autoclose = false
257
+ assert_equal false, mq.autoclose?
258
+ end
259
+ end if POSIX_MQ.respond_to?(:for_fd) && POSIX_MQ.method_defined?(:to_io)
260
+
261
+ def test_autoclose_propagates_to_io
262
+ @mq = POSIX_MQ.new @path, IO::CREAT|IO::RDWR, 0666
263
+ @mq.autoclose = false
264
+ assert_equal false, @mq.to_io.autoclose?
265
+ @mq.autoclose = true
266
+ assert_equal true, @mq.to_io.autoclose?
267
+ end if POSIX_MQ.method_defined?(:to_io)
268
+
247
269
  def test_notify
248
270
  rd, wr = IO.pipe
249
271
  orig = trap(:USR1) { wr.syswrite('.') }
metadata CHANGED
@@ -1,69 +1,52 @@
1
1
  --- !ruby/object:Gem::Specification
2
- name: !binary |-
3
- cG9zaXhfbXE=
2
+ name: posix_mq
4
3
  version: !ruby/object:Gem::Version
5
- version: 2.1.0
6
- prerelease:
4
+ version: 2.2.0
7
5
  platform: ruby
8
6
  authors:
9
- - !binary |-
10
- UnVieSBQT1NJWCBNUSBoYWNrZXJz
7
+ - Ruby POSIX MQ hackers
11
8
  autorequire:
12
9
  bindir: bin
13
10
  cert_chain: []
14
- date: 2014-02-15 00:00:00.000000000 Z
11
+ date: 2015-01-16 00:00:00.000000000 Z
15
12
  dependencies:
16
13
  - !ruby/object:Gem::Dependency
17
- name: !binary |-
18
- d3Jvbmdkb2M=
14
+ name: olddoc
19
15
  requirement: !ruby/object:Gem::Requirement
20
- none: false
21
16
  requirements:
22
- - - !binary |-
23
- fj4=
17
+ - - "~>"
24
18
  - !ruby/object:Gem::Version
25
- version: !binary |-
26
- MS41
19
+ version: '1.0'
27
20
  type: :development
28
21
  prerelease: false
29
22
  version_requirements: !ruby/object:Gem::Requirement
30
- none: false
31
23
  requirements:
32
- - - !binary |-
33
- fj4=
24
+ - - "~>"
34
25
  - !ruby/object:Gem::Version
35
- version: !binary |-
36
- MS41
37
- description: ! 'POSIX message queues allow local processes to exchange data in the
38
- form
39
-
26
+ version: '1.0'
27
+ description: |-
28
+ POSIX message queues allow local processes to exchange data in the form
40
29
  of messages. This API is distinct from that provided by System V
41
-
42
- message queues, but provides similar functionality.'
43
- email: !binary |-
44
- cnVieS5wb3NpeC5tcUBsaWJyZWxpc3QuY29t
30
+ message queues, but provides similar functionality.
31
+ email: ruby-posix-mq@bogomips.org
45
32
  executables:
46
- - !binary |-
47
- cG9zaXgtbXEtcmI=
33
+ - posix-mq-rb
48
34
  extensions:
49
- - !binary |-
50
- ZXh0L3Bvc2l4X21xL2V4dGNvbmYucmI=
35
+ - ext/posix_mq/extconf.rb
51
36
  extra_rdoc_files:
52
37
  - README
53
38
  - LICENSE
54
39
  - NEWS
55
- - ChangeLog
56
40
  - lib/posix_mq.rb
57
41
  - ext/posix_mq/posix_mq.c
58
- - LATEST
42
+ - posix-mq-rb_1
59
43
  files:
60
- - .document
61
- - .gitignore
62
- - .manifest
63
- - .wrongdoc.yml
44
+ - ".document"
45
+ - ".gitignore"
46
+ - ".manifest"
47
+ - ".olddoc.yml"
64
48
  - COPYING
65
49
  - COPYING-GPL2
66
- - ChangeLog
67
50
  - Documentation/.gitignore
68
51
  - Documentation/GNUmakefile
69
52
  - Documentation/posix-mq-rb.1.txt
@@ -74,44 +57,42 @@ files:
74
57
  - LICENSE
75
58
  - NEWS
76
59
  - README
77
- - Rakefile
60
+ - archive/.gitignore
61
+ - archive/slrnpull.conf
78
62
  - bin/posix-mq-rb
79
63
  - ext/posix_mq/extconf.rb
80
64
  - ext/posix_mq/posix_mq.c
81
65
  - lib/posix_mq.rb
82
66
  - man/man1/posix-mq-rb.1
83
67
  - pkg.mk
68
+ - posix-mq-rb_1
84
69
  - posix_mq.gemspec
85
70
  - setup.rb
86
71
  - test/test_posix_mq.rb
87
72
  homepage: http://bogomips.org/ruby_posix_mq/
88
- licenses: []
73
+ licenses:
74
+ - GPL-2.0
75
+ - LGPL-3.0+
76
+ metadata: {}
89
77
  post_install_message:
90
- rdoc_options:
91
- - -t
92
- - posix_mq - POSIX Message Queues for Ruby
93
- - -W
94
- - http://bogomips.org/ruby_posix_mq.git/tree/%s
78
+ rdoc_options: []
95
79
  require_paths:
96
80
  - lib
97
81
  required_ruby_version: !ruby/object:Gem::Requirement
98
- none: false
99
82
  requirements:
100
- - - ! '>='
83
+ - - ">="
101
84
  - !ruby/object:Gem::Version
102
85
  version: '0'
103
86
  required_rubygems_version: !ruby/object:Gem::Requirement
104
- none: false
105
87
  requirements:
106
- - - ! '>='
88
+ - - ">="
107
89
  - !ruby/object:Gem::Version
108
90
  version: '0'
109
91
  requirements: []
110
- rubyforge_project: !binary |-
111
- cXJw
112
- rubygems_version: 1.8.23
92
+ rubyforge_project:
93
+ rubygems_version: 2.4.5
113
94
  signing_key:
114
- specification_version: 3
95
+ specification_version: 4
115
96
  summary: POSIX Message Queues for Ruby
116
97
  test_files:
117
98
  - test/test_posix_mq.rb
data/Rakefile DELETED
@@ -1,33 +0,0 @@
1
- # -*- encoding: binary -*-
2
- require 'wrongdoc'
3
- cgit_url = Wrongdoc.config[:cgit_url]
4
- git_url = Wrongdoc.config[:git_url]
5
-
6
- desc "post news article to rubyforge"
7
- task :publish_news do
8
- require 'rubyforge'
9
- spec = Gem::Specification.load('posix_mq.gemspec')
10
- tmp = Tempfile.new('rf-news')
11
- _, subject, body = `git cat-file tag v#{spec.version}`.split(/\n\n/, 3)
12
- tmp.puts subject
13
- tmp.puts
14
- tmp.puts spec.description.strip
15
- tmp.puts ""
16
- tmp.puts "* #{spec.homepage}"
17
- tmp.puts "* #{spec.email}"
18
- tmp.puts "* #{git_url}"
19
- tmp.print "\nChanges:\n\n"
20
- tmp.puts body
21
- tmp.flush
22
- system(ENV["VISUAL"], tmp.path) or abort "#{ENV["VISUAL"]} failed: #$?"
23
- msg = File.readlines(tmp.path)
24
- subject = msg.shift
25
- blank = msg.shift
26
- blank == "\n" or abort "no newline after subject!"
27
- subject.strip!
28
- body = msg.join("").strip!
29
-
30
- rf = RubyForge.new.configure
31
- rf.login
32
- rf.post_news('qrp', subject, body)
33
- end