- Current – 0.9.8 (20 Feb 2014) –
    	As with 0.9.7, there are no code or feature changes in this version.
    	This version merely corrects a documentation error. 
    	 This version comes with a big wish for peace in Ukraine. Мир! 
- 0.9.7 (20 Feb 2014) –
    	There are no code or feature changes in this version. The bump in
    	    version number reflects that this is the first version
    	    also available on PyPI.
    	 This version comes with a big wish for peace in Ukraine. Мир! 
- 0.9.6 (23 Oct 2013) –
    	Fixed two BSD-specific bugs introduced in version 0.9.5 
    		that occurred if the kernel module mqueuefs wasn't 
    		loaded at install time. Specifically -- 
         
            - The installer 
            would print a harmless but distracting error message from sysctl.
            (This also affected OS X which is FreeBSD-ish.)
            
- posix_ipc would build with an inappropriate 
            value for QUEUE_MESSAGES_MAX_DEFAULT. 
            Subsequent attempts to create a message queue would fail unless the
            caller set the max_messages param to an appropriate
            value. (This didn't affect OS X since OS X doesn't support message
            queues at all.)
            
 Also, rewrote the message queue thread notification code to address
        the old bug (Fatal Python error: PyEval_AcquireLock: current thread state is NULL)
        that appeared during release testing for 0.9.5 and which 
        has plagued me on and off since I wrote this code. The new code uses 
        the
        algorithm recommended in the Python documentation which may have
        been flaky when I started using it in Python 2.4. It seems stable now
        under Python 2.6+/3. 
         
- 0.9.5 (14 Oct 2013) –
        
            - Added the ability to use Semaphores in context managers.
        	Thanks to Matt Ruffalo for the suggestion and patch.
            
- Fixed a big under FreeBSD 9.x where I used overly ambitious
            values for some message queue constants at build time. Now,
            posix_ipc asks sysctl for the correct values.
            Köszönöm to Attila Nagy for the bug report.
            
 
- 0.9.4 (2 Sept 2012) –
        Fixed a buglet. When creating shared memory under Linux and 
        specifying both a size and the read-only flag, creating the memory
        would succeed but calling ftruncate() would fail. 
        The failure to change the size was correctly reported 
        but posix_ipc failed to clean up the shared memory segment 
        it had created. That's now fixed. Thanks to Kevin Miles for the bug
        report.
         
- 0.9.3 (2 Jan 2012) –
        Added a bugfix/feature to raise an error (rather than segault) 
            when trying to use a closed semaphore.
            Thanks to Russel for the suggestion and patch.
         
- 0.9.2 (6 Nov 2011) –
        
            - Fixed a bug where timeouts in Semaphore.acquire(), 
                MessageQueue.send() and MessageQueue.receive()
                were only accurate to about one second due to use of the C call
                time(). Switching to gettimeofday() fixes 
                the problem. Thanks to Douglas Young for the bug report and
                patch.
            
- Fixed a bug in prober.py that caused install to fail
                under Ubuntu 11.10. prober.py specified link options 
                in the wrong order, and so linking one of the test 
                applications that's built during setup was failing. Thanks
                to Kevin Miles for the bug report.
            
- Added a check in prober.py to see if 
                sysconf_names exists in the os module. It
                doesn't exist under Cygwin, and this code caused an error 
                on that platform. Thanks to Rizwan Raza for the bug report.
            
 
- 0.9.1 (7 Apr 2011) –
        
            - Fixed (?) a bug in message queue thread notification that caused
                ceval: tstate mix-up and other fun messages. Thanks to
                Lev Maximov for the bug report.
            
- Added the demo3 directory with demos of message queue.
                This was supposed be included in version 0.9.0 but I accidentally
                left it out. (Also reported by Lev.) 
            
 
- 0.9.0 (31 Dec 2010) –
        Added the demo3 directory with demos of message queue 
            notification techniques. Also, fixed two bugs related to message 
            queue notification. Big thanks to
            Philip D. Bober for debugging and providing a patch to the
            most difficult part of the code. The bugs were –
         
            - First, the series of calls to set up the Python thread in 
               process_notification() were simply wrong. They worked 
               some (most?) of the time but would segfault eventually because 
               I was creating a Python thread state when I should not have.
            
- Second, the code in process_notification() failed
                to consider that the user's callback might re-request 
                notification, thus overwriting pointers that I would later
                decref. process_notification() is now thread-safe.
            
 
- 0.8.1 (15 Mar 2010) –
        Fixed a sloppy declaration that caused a compile error under
            Cygwin 1.7.1. Thanks to Jill McCutcheon for the bug report.
         
- 0.8.0 (2 Mar 2010) –
        
            - Fixed message queue support detection in FreeBSD and
                the platform-specific documentation about FreeBSD.
            
- Rearranged the documentation and split the history 
                (which you're reading now) into a separate file.
            
- I fixed two small bugs related to the confusing 
                message queue constants. The bugs and associated changes are 
                explained below. The explanation is really long not 
                because the changes were big (they weren't), but because
                they and rationale behind them are subtle.
            
                Fixing these bugs was made easier by this realization: 
                    on all of the systems to which I have access that implement 
                    message queues (FreeBSD, OpenSolaris, Linux, and Windows + 
                    Cygwin), all except Linux implement them as 
                    memory-mapped files or something similar. On these
                    non-Linux systems, the
                    maximum queue message count and size are pretty darn big 
                    (LONG_MAX). Therefore, only on Linux is anyone likely to 
                    encounter limits to message queue size and content.
                 The first bug I fixed was related to four message queue
                    constants mentioned in posix_ipc documentation:
                    QUEUE_MESSAGES_MAX, 
                    QUEUE_MESSAGES_MAX_DEFAULT, 
                    QUEUE_MESSAGE_SIZE_MAX and 
                    QUEUE_MESSAGE_SIZE_MAX_DEFAULT. All four were defined
                     in the C
                    code, but the two XXX_DEFAULT constants weren't exposed on 
                    the Python side. 
                 The second bug was that under Linux, QUEUE_MESSAGES_MAX and 
                    QUEUE_MESSAGE_SIZE_MAX were permanently fixed to their 
                    values at posix_ipc's compile/install time even if the 
                    relevant system values changed later. Thanks to Kyle Tippetts 
                    for bringing this to my attention. 
                 QUEUE_MESSAGES_MAX_DEFAULT was arbitrarily limited to 
                    (at most) 1024. This wasn't a bug, just a bad choice.
                 I made a few changes in order to fix these problems – 
                    - The constants QUEUE_MESSAGES_MAX and 
                        QUEUE_MESSAGE_SIZE_MAX
                        have been deleted since they were only sure to 
                        be accurate on systems where they were irrelevant. Furthermore, 
                        Linux (the only place where they matter) exposes these values 
                        through the file system (in 
                        /proc/sys/fs/mqueue/msg_max and 
                        /proc/sys/fs/mqueue/msgsize_max respectively) so Python
                        apps that need them can read them without any help 
                        from posix_ipc.
                    
- QUEUE_MESSAGES_MAX_DEFAULT and 
                        QUEUE_MESSAGE_SIZE_MAX_DEFAULT are now exposed to 
                        Python as they should have been all along. 
                        QUEUE_MESSAGES_MAX_DEFAULT is now set to 
                        LONG_MAX on all platforms except Linux, where
                        it's set at compile time from /proc/sys/fs/mqueue/msg_max. 
                    
- QUEUE_MESSAGE_SIZE_MAX_DEFAULT remains at the fairly 
                        arbitrary value of 8k. It's not a good idea to make it too big
                        since a buffer of this size is allocated every time 
                        MessageQueue.receive() is called. Under Linux, I 
                        check the contents of /proc/sys/fs/mqueue/msgsize_max
                        and make QUEUE_MESSAGE_SIZE_MAX_DEFAULT smaller if 
                        necessary.
                    
 
 
- 0.7.0 (21 Feb 2010) –
        Added Python 3.1 support. 
- 0.6.3 (15 Feb 2009) –
    	
    
- 0.6.2 (30 Dec 2009) –
        Fixed a bug where a MessageQueue's mode
            attribute returned garbage. Grazie to Stefano Debenedetti for
            the bug report.
         
- 0.6.1 (29 Nov 2009) –
        There were no functional changes to the module in this version, but 
        I added the convenience function close_fd() and fixed 
        some docmentation and demo bugs/sloppiness.
         
            - Added the convenience function SharedMemory.close_fd().
                Thanks to Kyle Tippetts for pointing out the usefulness
                of this.
            
- Added the module attributes __version__, 
                __copyright__, __author__ and 
                __license__.
            
- Fixed the license info embedded in posix_ipc_module.c
    	        which was still referring to GPL.
            
- Replaced file() in setup.py with 
                open()/close().
- Demo changes –
                
                    - Made the demo a bit faster, especially for large
                        shared memory chunks. Thanks to Andrew Trevorrow
                        for the suggestion and patch.
                    
- Fixed a bug in premise.c; it wasn't closing the semaphore.
- Fixed a bug in premise.py; it wasn't closing the 
                        shared memory's file descriptor. 
                    
- Fixed bugs in conclusion.py; it wasn't closing the 
                        shared memory's file descriptor, the semaphore or 
                        the mapfile.
                    
 
 
- 0.6 (5 Oct 2009) –
    	
    	    - Relicensed from the GPL to a BSD license to celebrate the
    	        one year anniversary of this module.
            
- Updated Cygwin info.
 
- 0.5.5 (17 Sept 2009) –
    	
    	    - Set MQ_MAX_MESSAGES and MQ_MAX_MESSAGE_SIZE to 
    	        LONG_MAX under cygwin.
    	        (Danke to René Liebscher.)
    	    
- Surrounded the #define PAGE_SIZE in probe_results.h with 
    	        #ifndef/#endif because it is already defined on some systems.
    	        (Danke to René Liebscher, again.)
    	    
- Minor documentation changes.
 
- 0.5.4 (21 Jun 2009) –
    	
    
- 0.5.3 (8 Mar 2009) –
    	
    	    - Added automatic generation of names.
- Changed status to beta.
 
- 0.5.2 (12 Feb 2009) –
    	
    	    - Fixed a memory leak in MessageQueue.receive().
- Fixed a bug where the name of the MessageQueue 
    	        current_messages attribute didn't match the name
    	        given in the documentation.
    	    
- Added the VERSION attribute to the module.
- Fixed a documentation bug that said message queue 
    	        notifications were not yet supported.
    	    
 
- 0.5.1 (8 Feb 2009) –
    	
    	    - Fixed outdated info in setup.py that was showing up 
    	        in the Python package index. Updated README while I
    	        was at it.
    	    
 
- 0.5 (8 Feb 2009) –
    	
    	    - Added the message queue notification feature.
- Added a mode attribute to each type.
- Added str() and repr() support to 
    	        each object.
    	    
- Added a demo for message queues.
- Fixed some minor documentation problems and added
    	        some information (esp. about Windows + Cygwin).
    	    
 
- 0.4 (9 Jan 2009) –
    	
    	    - Added message queue support.
- Fixed the poor choices I'd made for names for classes and
    	        errors by removing the leading "Posix" and "PosixIpc". 
    	    
- Simplified the prober and expanded it (for message
    	        queue support).
    	    
- Cleaned up this documentation.
 
- 0.3.2 (4 Jan 2009) –
    	
    	    - Fixed an uninitialized value passed to PyMem_Free() when
    	        invalid params were passed to either constructor. 
    	    
 
- 0.3.1 (1 Jan 2009) –
     	
    	    - Fixed a big bug where the custom exceptions defined by this
    	        module weren't visible.
    	    
- Fixed a compile complaint about the redefinition of 
    	        SEM_VALUE_MAX on Linux (Ubuntu) that I introduced
    	        in the previous version.
    	    
- Fixed a bug in the demo program premise.c where I wasn't
    	        closing the file descriptor associated with the shared
    	        memory.
    	    
- Added the PAGE_SIZE attribute. This was already
    	        available in the mmap module that you need to use shared
    	        memory anyway, but adding it makes the interface more 
    	        consistent with the sysv_ipc module.
    	    
 
- 0.3 (19 Dec 2008) –
    	
        	- Added informative custom errors instead of raising 
        	    OSError when something goes wrong.
        	
- Made the code friendly to multi-threaded applications.
        	
- Added the constants O_CREX and 
			    SEMAPHORE_VALUE_MAX.
			
- Added code to prohibit negative timeout values.
 
- 0.2 (4 Dec 2008) –
    	
        	- Removed the un-Pythonic try_acquire() method. The
        	    same functionality is now available by passing a timeout of 
        	    0 to the .acquire() method.
        	
- Renamed the module constant ACQUIRE_TIMEOUT_SUPPORTED to
			    SEMAPHORE_TIMEOUT_SUPPORTED.
			
- Moved the demo code into its own directory and added C
			    versions of the Python scripts. The parameters are now in a 
			    text file shared by the Python and C program, so you can
			    run the C version of Mrs. Premise and have it communicate with
			    the Python version of Mrs. Conclusion and vice versa.
			
 
- 0.1 (9 Oct 2008) – Original (alpha) version.