ChangeLog in posix_mq-0.5.1 vs ChangeLog in posix_mq-0.6.0
- old
+ new
@@ -1,72 +1,502 @@
-ChangeLog from git://git.bogomips.org/ruby_posix_mq.git (v0.4.0..v0.5.1)
+ChangeLog from http://git.bogomips.org/cgit/ruby_posix_mq.git
- commit 3ca83d322486bb3da20d974af7faa74f9df891d8
- Author: Eric Wong <normalperson@yhbt.net>
- Date: Sun May 9 01:05:56 2010 -0700
-
- posix_mq 0.5.1
-
- Fix POSIX_MQ#notify(&block) usage, this regression was
- introduced in 0.4.0 and our tests for it were broken, as well.
-
- commit a997f4822a99590c7a5175be4a694b4482a4b997
- Author: Eric Wong <normalperson@yhbt.net>
- Date: Sun May 9 00:05:03 2010 -0700
-
- fix POSIX_MQ#notify(&block) aka SIGEV_THREAD
-
- tests for them were stupidly broken and never executed :x
-
- commit f3605c820fd73713e34950170bf759e1af204038
- Author: Eric Wong <normalperson@yhbt.net>
- Date: Tue May 4 19:48:18 2010 -0700
-
- posix_mq 0.5.0
-
- 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
-
- commit f4d7d9d14cf65595aa3d98429a6732bd6b007b4a
- Author: Eric Wong <normalperson@yhbt.net>
- Date: Tue May 4 19:37:37 2010 -0700
-
- doc: updates for RDoc 2.5.x
-
- commit 7b1b8a1cbbedc2764d4a8ab0d992f9f2ef73d9b7
- Author: Eric Wong <normalperson@yhbt.net>
- Date: Tue May 4 19:31:47 2010 -0700
-
- rename `posix-mq.rb' executable to `posix-mq-rb'
-
- ".rb" in the executable name is discouraged by the
- {Ruby packaging standard}[http://github.com/chneukirchen/rps]
- and probably confusing.
-
- If I ever get around to it, a non-Ruby version of this
- executable is planned, and that will be called "posix-mq"
-
- commit 33368c839dc8c63489591bda6e60c78025be8852
- Author: Eric Wong <normalperson@yhbt.net>
- Date: Thu Apr 22 00:02:25 2010 -0700
-
- GC safety fixes
-
- Avoid the RSTRING_PTR(rb_inspect(val)) construct, as it may not
- preserve the value of rb_inspect() on the stack.
-
- commit a9a365326ea0f7a37852d25adfb03049c0b24c22
- Author: Eric Wong <normalperson@yhbt.net>
- Date: Wed Apr 21 23:58:25 2010 -0700
-
- cleaner lookup "Signal" of constant
-
- Instead of blindly defining a module, this is more flexible in
- case Signal in Ruby itself becomes something other than a
- module.
+ commit 88e85b58f3cb0796a680c86d83c16c305c33b098
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Dec 25 00:23:03 2010 -0800
+
+ posix_mq 0.6.0 - Rubinius support
+
+ 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.
+
+ commit 2384ecce25e91feb1ec0a9537c76beb18a7d4f86
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Dec 25 00:19:49 2010 -0800
+
+ switch to wrongdoc for documentation
+
+ No more JavaScript on our site!
+
+ commit 5339d9d693c794c0f20270d5726cb360e31dff30
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Fri Dec 24 23:56:07 2010 -0800
+
+ add Rubinius support
+
+ Cleaner code, too, no more direct RSTRUCT usage.
+
+ commit 79583aaa426ac2f0967cb84524b6e17d72499cd5
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Fri Dec 24 23:24:29 2010 -0800
+
+ refactor type checks and remove unnecessary guards
+
+ StringValuePtr should already be a sufficient guard.
+ There are more tests while we're at it, too, and we'll
+ now raise TypeError instead of ArgumentError when a
+ POSIX_MQ::Attr is not passed properly.
+
+ commit 31dee76d5ef41ec5524c3e4dfb802db4a7a468ef
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Fri Dec 24 18:11:04 2010 -0800
+
+ remove rb_time_interval() and gettimeofday() dependency
+
+ This function isn't exported in the standard Ruby headers,
+ it returns an aggregate value and isn't available in Rubinius,
+ either, so nuke it.
+
+ While we're at it, use clock_gettime() instead of gettimeofday()
+ to avoid unnecessary timeval usage since mq_send/mq_receive
+ rely on higher-precision timespecs instead.
+
+ commit 748d4aa2d3ece18db7d48c355ce77c877e4d3bb9
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Thu Aug 19 19:37:32 2010 -0700
+
+ tests: use Class#method_defined?
+
+ I did not know about this method back in the day...
+
+ commit 8f5be0c822362e113919145d52b9eeebba711236
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Thu Aug 19 19:36:23 2010 -0700
+
+ test: avoid leaving queues behind
+
+ We shouldn't unnecessarily hog system resources.
+
+ commit cea38abf1f76b5b795b9341406ee814303f5752b
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Thu Aug 19 19:25:58 2010 -0700
+
+ avoid double close() and EBADF
+
+ It can be dangerous to hit (and ignore) EBADF errors in
+ multi-threaded applications. Users of POSIX_MQ#to_io have two
+ Ruby objects pointing to the same file descriptor, making
+ things tricky when it comes time to reap resources.
+
+ We'll always prefer to close the Ruby IO object if it exists
+ (because we have less control over its GC behavior) and
+ ignore the raw descriptor.
+
+ commit 3cf7ec34b6319693af14215ebb0da51c3e6a4603
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Mon Aug 2 08:28:15 2010 +0000
+
+ open/notify: invoke GC if needed
+
+ On ENOMEM, EMFILE, and ENFILE errors, it is customary to
+ invoke the Ruby GC and free up resources and retry the
+ system call.
+
+ commit 3ca83d322486bb3da20d974af7faa74f9df891d8
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sun May 9 01:05:56 2010 -0700
+
+ posix_mq 0.5.1
+
+ Fix POSIX_MQ#notify(&block) usage, this regression was
+ introduced in 0.4.0 and our tests for it were broken, as well.
+
+ commit a997f4822a99590c7a5175be4a694b4482a4b997
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sun May 9 00:05:03 2010 -0700
+
+ fix POSIX_MQ#notify(&block) aka SIGEV_THREAD
+
+ tests for them were stupidly broken and never executed :x
+
+ commit f3605c820fd73713e34950170bf759e1af204038
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Tue May 4 19:48:18 2010 -0700
+
+ posix_mq 0.5.0
+
+ 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
+
+ commit f4d7d9d14cf65595aa3d98429a6732bd6b007b4a
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Tue May 4 19:37:37 2010 -0700
+
+ doc: updates for RDoc 2.5.x
+
+ commit 7b1b8a1cbbedc2764d4a8ab0d992f9f2ef73d9b7
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Tue May 4 19:31:47 2010 -0700
+
+ rename `posix-mq.rb' executable to `posix-mq-rb'
+
+ ".rb" in the executable name is discouraged by the
+ {Ruby packaging standard}[http://github.com/chneukirchen/rps]
+ and probably confusing.
+
+ If I ever get around to it, a non-Ruby version of this
+ executable is planned, and that will be called "posix-mq"
+
+ commit 33368c839dc8c63489591bda6e60c78025be8852
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Thu Apr 22 00:02:25 2010 -0700
+
+ GC safety fixes
+
+ Avoid the RSTRING_PTR(rb_inspect(val)) construct, as it may not
+ preserve the value of rb_inspect() on the stack.
+
+ commit a9a365326ea0f7a37852d25adfb03049c0b24c22
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Wed Apr 21 23:58:25 2010 -0700
+
+ cleaner lookup "Signal" of constant
+
+ Instead of blindly defining a module, this is more flexible in
+ case Signal in Ruby itself becomes something other than a
+ module.
+
+ commit aa9beecf64739ea084158ff63a92f626bfb5717d
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Mar 13 00:28:14 2010 -0800
+
+ posix_mq 0.4.0
+
+ 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
+
+ commit 437cbe78cb0f239e34f9dbf1341f5b85f96f2f25
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Mar 13 00:22:22 2010 -0800
+
+ ensure POSIX_MQ#name is clobber-proof
+
+ We don't want folks to accidentally clobber the value for
+ others, so allocate a new string object for it (don't worry,
+ rb_str_dup() is cheap in 1.9).
+
+ commit 74e1f75b238416d9ac402f291431a5e457ae313f
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Mar 13 00:08:37 2010 -0800
+
+ remove non-portable #warning CPP directive
+
+ There's a good chance they're not using GCC if they're on some
+ weird platform that we'd emit a warning for.
+
+ commit 9881f136858ac8f3a77a6cea8ce15b1cdb4ad55a
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Tue Mar 2 22:47:29 2010 -0800
+
+ add TODO item for using netlink under Linux
+
+ commit 19668b0edc9b09cfd72247f7041390e0328032a0
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Tue Mar 2 21:20:28 2010 -0800
+
+ fix potential race with notify(&block)
+
+ We need to assign the notify_thread before assigning the
+ notification. Otherwise, there's a chance the notification
+ could fire and the notify_thread is not properly assigned for
+ the POSIX_MQ object when the pipe becomes readable.
+
+ commit 0f4a8ef81479f9eff9037011d81b96cf402cbe7b
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Feb 20 17:36:16 2010 -0800
+
+ POSIX_MQ#to_io works under FreeBSD, too
+
+ commit 44cd880c96a76d43f6dcc7f7cdf7f687e32bda0c
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Feb 20 17:35:08 2010 -0800
+
+ README: add mailing list archives info
+
+ commit 4b56e475483454cd6616dd3c310c251940e9368b
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Feb 20 17:19:52 2010 -0800
+
+ avoid shadow warnings
+
+ commit 97ef1cfd699640e40d2d63746d005f4f4cf6a863
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Feb 20 14:52:16 2010 -0800
+
+ POSIX_MQ#<< does not release GVL when non-blocking
+
+ Missed this with the other change
+
+ commit 5849a3ca8e0691a7f39c5cdbfc09fc34ee4da308
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Feb 20 14:46:04 2010 -0800
+
+ do not release GVL when unlinking/opening
+
+ Since the message queue is not actually on a (slow) block
+ device, it's unlikely to block in a way where other tasks may be
+ scheduled by the kernel. So avoid complicating things and
+ unnecessary task switching and assume mq_open/mq_unlink can
+ be executed as fast as the CPU/memory subsystems allows.
+
+ commit a90d0f97c9eb5d9683af09b60ef7af9e94a255c3
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Feb 20 14:40:16 2010 -0800
+
+ do not release GVL for non-blocking operations
+
+ There's no point in wasting cycles releasing and reacquiring
+ a lock when we know we won't block. Since most non-blocking
+ users are expected to be single/few-threaded processes, this
+ will likely help them.
+
+ commit 67a59023164bc039129b34a742f06ba376687684
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Wed Feb 17 00:37:43 2010 -0800
+
+ make POSIX_MQ#dup and POSIX_MQ#clone no-op
+
+ It'll cause problems for the automatic mq_close() during GC
+ otherwise, as dup(2) on an mqd_t isn't portable.
+
+ Of course there's no point in cloning or duping, either, as
+ mq_send/mq_receive operations are always atomic at the kernel
+ level and only one thread can have a notification registered
+ for it.
+
+ commit 05e577616b74bea99a0e43e07f28823ddda1aaf9
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Feb 13 03:39:17 2010 -0800
+
+ posix_mq 0.3.1
+
+ 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.
+
+ commit 9adbee0ab71bf408db5c3befb43b2bab0d86ebb2
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Feb 13 03:30:44 2010 -0800
+
+ use GC correctly and avoid memory leaks
+
+ We still need to explicitly free the pointer we're given, and
+ not just close the associated file descriptor. Fortunately most
+ people to not spend all day opening/closing message queue
+ descriptors so this leak may not be noticeable.
+
+ commit c07cf2979036b9550566d59d6d4899be98f3e553
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Thu Jan 21 20:44:22 2010 -0800
+
+ add #shift test with destination buffer
+
+ commit 1d0bf6f1d39e085948008c2c6d381ed929ac109e
+ Author: Eric Wong <normalperson@yhbt.net>
+ Date: Sat Jan 9 15:16:40 2010 -0800
+
+ Rakefile: fix raa_update task
+
+ commit 2e420820d3b3fb228c810937539f95a618a2c271
+ Author: Eric Wong <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ Date: Sat Jan 2 21:19:58 2010 -0800
+
+ doc: FreeBSD-specific notes + example code
+
+ commit 6f24b5626f89fbb6445c0943ba71f56c8945e18f
+ Author: Eric Wong <normalperson@yhbt.net>
+ 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 <normalperson@yhbt.net>
+ Date: Sat Jan 2 02:33:23 2010 -0800
+
+ initial commit