ChangeLog from git://git.bogomips.org/ruby_posix_mq.git () commit 2e420820d3b3fb228c810937539f95a618a2c271 Author: Eric Wong Date: Sat Jan 9 22:52:27 2010 +0000 posix_mq 0.3.0 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. commit 2c71257b2b95e737088726ffc963b4e72f1b5455 Author: Eric Wong Date: Sat Jan 9 22:49:49 2010 +0000 MRI 1.8 does not have rb_str_flush It's Rubinius-specific and we use rb_str_resize there anyways... commit 531106e51e519458d37bed3721da4eff2f163206 Author: Eric Wong Date: Fri Jan 8 11:30:49 2010 -0800 no point in non-blocking for fd notifications It's not needed since the native thread will retry in the unlikely case of EINTR/EAGAIN. And writing one byte to a pipe that's guaranteed by POSIX to be at least 512 bytes is highly unlikely. It's also bad because F_SETFL takes the big kernel lock under Linux (and possibly other systems), and doing it unnecessarily is a waste of system cycles. commit d03c76ae11ca6294e05262df747e4d43822ada73 Author: Eric Wong Date: Fri Jan 8 11:25:06 2010 -0800 mode_t is usually unsigned Most used open modes are well under INT_MAX, however commit b3c31cf444e2ca3dae0f6d2370944bfbf3382d88 Author: Eric Wong Date: Thu Jan 7 01:45:25 2010 -0800 add POSIX_MQ#shift helper method This acts like POSIX_MQ#receive but only returns the message without the priority. commit 3700db51399e4949ed314ad0545d037b7762064e Author: Eric Wong Date: Thu Jan 7 09:28:57 2010 +0000 POSIX_MQ#notify only works on GNU/Linux for now SIGEV_THREAD is not easy to implement, so many platforms do not implement it. commit 40d61f55ac53e3cd2f229d0b032da03032e3d53d Author: Eric Wong Date: Thu Jan 7 00:37:57 2010 -0800 POSIX_MQ#notify block execution on message received This is implementation uses both a short-lived POSIX thread and a pre-spawned Ruby Thread in a manner that works properly under both Ruby 1.8 (green threads) and 1.9 (where Ruby Threads are POSIX threads). The short-lived POSIX thread will write a single "\0" byte to a pipe the Ruby Thread waits on. This operation is atomic on all platforms. Once the Ruby Thread is woken up from the pipe, it will execute th block given to it. This dual-thread implementation is inspired by the way glibc implements mq_notify(3) + SIGEV_THREAD under Linux where the kernel itself cannot directly spawn POSIX threads. commit d8c8fb4155c1feea454abc3ed3f0a4b26e90be68 Author: Eric Wong Date: Sun Jan 3 05:26:00 2010 +0000 fix warnings on platforms where mqd_t != int The POSIX manpages specify the return values of all mq_* functions besides mq_open(3) to be "int", not "mqd_t". commit dbe5ed46e07b853e79e44141924a0166016e3e44 Author: Eric Wong Date: Sat Jan 2 23:19:34 2010 -0800 bump GIT-VERSION-GEN Shouldn't affect most people since they should just take code from git... commit fd2fcdeee6b44f7854255cb7e01c81db3cd2d99c Author: Eric Wong Date: Sun Jan 3 05:46:45 2010 +0000 posix_mq 0.2.0 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. commit 350bfc831938d84cc2d478f2cf88583863cb64fb Author: Eric Wong Date: Sun Jan 3 05:35:50 2010 +0000 support POSIX_MQ#to_io under FreeBSD FreeBSD implements an __mq_oshandle(mqd_t mqd) function to convert mqd_t to integer file descriptors. commit 26015d39e9c848a536b4ea44802f858a4e6e74f7 Author: Eric Wong Date: Sun Jan 3 04:17:56 2010 +0000 fix build under FreeBSD 7.2 FreeBSD seems to need some files explicitly included. commit e7ac70686b3c09953f6c41966dbd77f77368a9ec Author: Eric Wong Date: Sat Jan 2 21:19:58 2010 -0800 doc: FreeBSD-specific notes + example code commit 6f24b5626f89fbb6445c0943ba71f56c8945e18f Author: Eric Wong Date: Sat Jan 2 20:41:39 2010 -0800 Fix mq.notify = nil to unregister notifications "mq.notify = false" also works now, doing what "mq.notify = nil" used to do (using SIGEV_NONE). I was confused by SIGEV_NONE usage vs using a NULL pointer for the notification passed mq_notify(3). SIGEV_NONE does not actually unregister, it registers a no-op notification which prevents other processes from taking us. This also fixes the test case to pass under both Linux and FreeBSD. commit 522d4d1472c216bd95a16ca5b118bc14693aad64 Author: Eric Wong Date: Sat Jan 2 02:33:23 2010 -0800 initial commit