Blocking methods no longer raise Errno::EINTR (to match Ruby IO semantics, making code easier to work with). There are also many FreeBSD-related fixes thanks to Hleb Valoshka <375gnu@gmail.com> and small code cleanups.
There is one backwards-incompatible API change: POSIX_MQ#send returns +true+ on success instead of +nil+ for consistency with POSIX_MQ#trysend. This release adds the POSIX_MQ#trysend, POSIX_MQ#tryreceive and POSIX_MQ#tryshift interfaces to avoid exceptions on common EAGAIN errors for users of non-blocking queues. Bugfixes: non-blocking behavior changes to a shared descriptor in a different process are reflected immediately in the child (this won't fix race conditions in your code, however). Minor bugfixes for posix-mq-rb(1) and quieted warnings for 1.9.3dev.
This adds trysend, tryreceive, and tryshift interfaces to avoid exceptions on common EAGAIN errors for non-blocking users. EAGAIN during non-blocking messages is common when there are multiple readers/writer threads/processes working on the same queue. trysend is like send, except it returns true for success and false for EAGAIN. send (still) returns nil, which I now consider a mistake but won't change until post-1.0... tryreceive and tryshift are like receive and shift respectively, but they return nil for EAGAIN and the same return values for their non-shift variants. None of these methods call mq_setattr() beforehand to set the non-blocking flag, it assumes the user set it once before they were ever called and never changes it. Checking/setting the non-blocking flag every time is needless overhead and still subject to race conditions if multiple processes/queues keep flipping flag on the same queue descriptor. These interfaces are not yet final, feedback is appreciated at ruby.posix.mq@librelist.org.
This release now works for systems other than Linux and FreeBSD that support POSIX message queues. This is usable for systems without mq_timedsend() or mq_timedreceive() but with the non-timed variants (timeouts wont work). Thanks to Tadeusz Bochan for testing. Ruby posix_mq is now dual-licensed under the GPLv2 (as well as the preferred LGPLv3) for compatibility with existing GPLv2-only code.
Rubinius 1.2 as well as Ruby 1.9. Ruby 1.8 works except it will block the entire interpreter for blocking operations. Spurious errors during GC for POSIX_MQ#to_io users are now avoided.
Fix POSIX_MQ#notify(&block) usage, this regression was introduced in 0.4.0 and our tests for it were broken, as well.
Uncommonly raised exceptions due to programmer error are now raised more safely with respect to the MRI garbage collector. The "posix-mq.rb" executable has been renamed to "posix-mq-rb" to respect RPS and is also hopefully easier to type/read when used in scripts. I'm preserving the "rb" in the name since I hope to have a more portable, C-only version someday. Minor cleanups and documentation now uses RDoc 2.5.x
Small bugfixes and small API changes to avoid potential issues/misuse are the focus of this release. For non-blocking operation, the GVL is no longer bounced. This reduces synchronization/scheduling overhead when used in non-blocking applications. Small cleanups and documentation improvements, too. * make POSIX_MQ#dup and POSIX_MQ#clone no-op * do not release GVL for non-blocking operations * do not release GVL when unlinking/opening * POSIX_MQ#<< does not release GVL when non-blocking * avoid shadow warnings * README: add mailing list archives info * POSIX_MQ#to_io works under FreeBSD, too * fix potential race with notify(&block) * add TODO item for using netlink under Linux * remove non-portable #warning CPP directive * ensure POSIX_MQ#name is clobber-proof
This fixes a misuse of the Ruby API leading to memory leaks in cases where message queues are continually opened and closed throughout the lifetime of the application. Fortunately applications have little reason to repeatedly open and close message queue descriptors: they are multi-thread/multi-process-safe in every way imaginable and also capable of non-blocking operation.
This release adds a few new API methods, fixes MRI 1.8.6 support. We should now have full feature parity with underlying POSIX message queue C API. * POSIX_MQ#notify(&block) RDoc: http://bogomips.org/ruby_posix_mq/POSIX_MQ.html#M000001 This is only supported on platforms that implement SIGEV_THREAD with mq_notify(3) (tested with glibc + Linux). Other platforms will have to continue to rely on signal notifications via POSIX#notify=signal, or IO notifications in FreeBSD (and Linux). * POSIX_MQ#shift([buffer [,timeout]]) Shorthand for the common "POSIX_MQ#receive.first" when you do not care for priority of the received message. Rev, EventMachine and Reactor support are planned for Linux, FreeBSD and possibly any other platforms where POSIX message queues are implemented with a file descriptor.
This release fixes notification (un)registration and should be fully-supported on modern FreeBSD (7.2+) releases. POSIX_MQ#notify=nil correctly unregister notification requests. POSIX_MQ#notify=false now provids the no-op SIGEV_NONE functionality. Under FreeBSD, using IO.select on POSIX_MQ objects is now possible as it has always been under Linux.
initial
Originally generated with the Darkfish Rdoc Generator 2, modified by wrongdoc.