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