Changelog
  version 1.3.12:

    - Fix macro bug that causes Send and Sendmx to report failure even if
    they succeed. (AST)
  version 1.3.11:

    - Added the missing sendmx.h file to the Manifest. (AST)
  version 1.3.10:

    - Changed all the fundamental function names to SrrSomething to remove
    QNX-specific names from the basic API. QNX calls are now macros mapping
    to the Srr calls. (AST)
  version 1.3.9:

    - Sigh. Changed timer_t to srr_timer_t and clockid_t to srr_clockid_t to
    deal with the ever-expanding ring of confusion around the POSIX timer
    and clock support in the Linux kernel. You are now unable to use both
    the linux kernel versions and the srr versions in the same program.
    (AST)
  version 1.3.8:

    - Added ifdefs around timer_t and clockid_t to resolve a conflict with
    time.h. (AST)
    - Fix a bug in qnx_name_locate causing it to fail if it is the first SRR
    call after a fork(). (AST)
    - Moved the _mxfer_entry information into the main exported header file
    instead of having them it in a separate file. (AST)
  version 1.3.7:

    - Added Sendmx, Replymx, Receivemx calls by John Green. It is possible
    to implement Send, Receive and Reply in terms of these, but they turn
    out to be about 10% slower. That doesn't make sense, but there you have
    it. (JG)
    - Modified the srr_lib.c to remove the slightly confusing recursive
    calls. They didn't actually recurse more than once, but now it is a
    little bit easier to read. (JG)
    - Added code to return the actual number of bytes copied in Send and
    Receive (well, Send anyway), and then commented it out again because
    this could break existing applications. It would be nice to know this
    information at some point. (AST)
  version 1.3.6:

    - Fix incompatibility with the 2.2.16 kernel that is shipped with Redhat
    7.0. People keep messing with the signal representation in the task
    structure. (AST)
    - Fix incompatibility with the RedHat 7.0 header organization where you
    cannot compile without the kernel source installed. You may have to
    modify the INCLUDEDIR line of mod/Makefile to compile on your
    installation. (AST)
    - Selectively remove the ability to use versioned kernel symbols. There
    is a header dependency cycle that I have not been able to solve.
    Removing the versioned kernel symbols means that depmod will complain
    about undefined symbols, but everything will work just fine. (AST)
  version 1.3.5:

    - Fix incompatibility with the 2.4.0 release kernel. There was a change
    to how signal sets were stored in the task structure that stopped srripc
    from compiling. (AST)
    - We have a patch that I apologize is not yet included in this release.
    Would anybody care to try to incorporate it? Please let me know:
    andrew@cogent.ca. - Direct process-to-process copy, removing the need to
    cache in the kernel. This improves overall throughput, and is probably
    the Right Thing To Do. By Frederic Rossi.
  version 1.3.4:

    - Fix race in proxy timers. The timer function was assumed to run in the
    bottom half handler of the timer interrupt, but is in fact run in the
    interrupt context. Triggering a proxy needs access to the task table and
    receive queues, so there were some windows of opportunity for corruption
    of receive queues, leading to lost events. Changed the timer code to run
    in an immediate bottom half handler, which has the side effect of
    damaging determinism in timers. There appears to be no choice. Signals
    are still delivered during the ISR, which may not be safe. Perhaps this
    code should also be moved to the bottom half handler. (AST)
  version 1.3.3:

    - Added Readmsg and Writemsg. New test program, rwmtest.c. (AS)
    - Added UTIME (microsecond timer) timer code from Richard Romano. This
    requires the U. of Kansas UTIME kernel patches
    (http://www.ittc.ukans.edu/utime). This is turned on with the
    CONFIG_UTIME kernel configuration option. (RR)
    - Fix a memory leak when destroying a task. (AS)
    - Works with 2.2.x and 2.4.x Linux kernels. (AST)
    - Fix undefined references during depmod. (AST)
  version 1.3.2:

    - fixed mod/Makefile and exe/srrmodule to properly do a test load
    without having to install first. (AS)
    - fix KDEBUG macro to exist but be empty if compiling without debugging.
    (AS)
    - add Readmsg() call (mirrors QNX Readmsg()) call, to read data from the
    current incoming message. (AS)
  version 1.3.1:

    - fixed bug in qnx_name_attach bug fix that would result in an infinite
    loop when attaching a name that is already in use.
  version 1.3:

    - fixed bug in memset that caused timers not to be deallocated. (AST)
    - made name (qnx_name_attach) mutually exclusive. Return EBUSY if name
    is in use. (AST)
    - change to use major 10, minor 171, to agree with official Linux device
    assignments. (AST)
    - change name of module from srr to srripc to agree with official Linux
    device assignments. If you want to be compatible with old binaries, do
    "mknod -m0666 /dev/srr c 10 171". (AST)
    - Add environment variable SRRDEV to the client library to allow more
    than one srripc module to be loaded at a time. This is really only
    useful for testing. Default: /dev/srripc (AST)
    - explicitly include pod2??? scripts because different Linux
    distributions seem not to always have them. (AST)
    - change to Makefile to insert auto module loading line in
    /etc/conf.modules (AST)
    - NOTE: not ported back to linux 2.0.x (!AST)
  version 1.2:

    - rearranged source directories, and made install targets
    - fixed bugs in task death notification that caused deadlock (Andrew
    Thomas)
    - added a /proc/srr directory with a lot more information (Andrew
    Thomas)
    - ported back to linux 2.0.x (again)
  version 1.1:

    - re-implemented timers in the module to more closely follow POSIX
    semantics
    - timers can now deliver signals as well as proxies
  version 1.0:

    - Work around for sleep bug (see TODO), user won't see the bug, but it
    still bothers me.
    - Fixed fork bug (but only for >2.2 kernels, see README).
    - Ported to 2.2 kernel (Andrew Thomas)
    - Andrew Thomas implemented (for 2.2.*, I back-ported it to 2.0.*):
        - Creceive(),
        - task death notification (qnx_pflags),
        - proxy notification on timer expiry (timer_*), and
        - select()
    - Fixed bug with a proxies not having their args.pid set, despite being
    in a state of send blocked, which confused the task release procedure.
    - Added SrrDebug() to control verbosity of debug messages in a module
    built with debugging compiled in.
    - Fixed non-QNX names for task states (sorry, slight
    misunderstanding...).
  version 0.4: saturday, may 01

    - Fixed bug causing busy loop when module wasn't loaded.
    - Can compile tserver agains FC Software's SRR emulation, but due to
    incompatibilities between the QNX API and their interface it will take
    more work to do a runnable port.
    - Default build is non-debuggable and triggered by the SRRDEBUG env
    variable.
  version 0.3: sunday, april 05

    - Removed dynamic memory allocation for recv_q management.
    - Added work-around for tasks being woken up when they shouldn't, don't
    know if it's my bug, or something I don't understand about wait queues.
    - Made task structure simpler (and more like Linux's).
    - tserver test now runs without problems.
