SGI Logo
 
 

Patch 3356 : Pthread library fixes : [IRIX 6.4 6.3 6.2]
INDEX

  • Relations
  • Release Notes
  • Inst Subsystem Requirements
  • Inst Subsystem Checksums
  • Inst Subsystem File Listings
  • Download Patch


    RELATIONS

    This patch replaces the following patches:
    1361, 1405, 1644, 1941, 2040, 2041, 2161, 2162, 2254, 2420, 2791

    This patch is incompatible with the following patches:
    1362

    This patch fixes the following bugs:
    327458 - TAKE pt.c
    360218 - IRIX 6.2 is not posix 1003.1b compliant
    412725 - cx: rld hang in pthread/C++ program
    436647 - Pthreads app hangs in pt_alloc()
    439638 - pthread app hangs - ready pthreads, idle vps
    439648 - pthread app dumps core during GC malloc test
    445235 - Pthread and signal handler mask out of sync.
    459551 - Pthreads: No way to set concurrency
    460998 - Pthreads: FASTA failing under IRIX 6.4
    466172 - Pthreads: blockproc()/unblockproc() should be rejected
    468984 - dmi system call doesn't work with pthreads
    471918 - Pthreads: stack cache sync on fork
    476184 - problems with aio in pthreaded program
    479337 - Pthreads: resched mask/ SEGV exception interaction
    481944 - Pthreads: sigsuspend() broken
    482530 - Pthreads: blocking calls cause starvation (svc_run())
    482660 - lower sginap value from vp_yield in libpthread
    485218 - Pthreads: condition broadcast busted
    491107 - Pthreads: extend pthread max beyond 4096
    498470 - Pthreads: webdird app hangs - vp starvation
    498816 - Pthreads: blocking signals prevents core dumps
    501099 - a.out exists after program using aio exits
    501104 - "system()" fails when used in a program that includes aio calls and
                    -lpthrea

    510041 - Document concurrency interfaces
    515431 - VSTH: Cancellation Points
    520527 - Pthreads: thread returns from abort()
    523500 - pthreads process mistakenly execs a binary over itself
    525427 - Pthreads: cancellation deadlock (webdird)
    526820 - Pthreads: pthread id lost on fork()
    533294 - Pthreads: must use internal meory allocation routines
    545636 - XPG5:VSTH: T.pthread_key_delete[5] failure
    549599 - XPG5:VSTH:T.sigwait:Pthreads fails to clear ignored pending signals
    550979 - XPG5:VSTH5.1.2A: Unresolved symbol "pthread_equal"
    551386 - Native threads java deadlocks in GC (pthreads signals misdirected?)
    557446 - pthread_create() second argument should be 'const pthread_attr_t *'
    565615 - Pthreads: pthread_join() should return error on detach
    570353 - pthread sigaction returns the wrong handler in oact
    570640 - XPG5:VSTH: need to initialise fpcsr
    572433 - Pthreads: wait() returns with pid 4
    576526 - Pthreads: nested signal delivery recursion
    581002 - Pthreads:wait() when childless hangs
    585868 - Pthreads: sigsuspend/cancellation vp_occlude imbalance
    587649 - Pthreads: termination handler cancellation state
    591261 - libpthread enqueues multiple timeouts incorrectly
    595956 - Pthreads: vp_yield() consumes too much CPU
    604441 - Pthreads: need mutex handover interface for Java
    614809 - Pthreads: need C++ exception id function
    629902 - Pthreads: Preemption warnings with patch 2791
    662241 - forked child's getppid() != parent's getpid() with pthreads
    662332 - 6.4 pthreads fails to call __tp_system_pre()


    RELEASE NOTES

    1. Patch SG0003356 Release Note

           This release note describes patch SG0003356 to IRIX 6.2, 6.3
           and 6.4.
    
           Patch SG0003356 addresses flaws in earlier releases of POSIX
           threads (pthreads) IEEE 1003.1c-1995 Standard.
    
           This patch SHOULD NOT be installed unless the POSIX Patch
           Set and the rld patch 1932 OR LATER is also installed.
    
    
    1.1 Supported Hardware Platforms
           All platforms running IRIX 6.2, 6.2pacecar, 6.3-O2-10K and
           6.4.
    
    
    1.2 Supported Software Platforms
           Patch SG0003356 may be installed on IRIX 6.2, 6.3 and 6.4
           systems configured with the POSIX Patch Set and rld patch
           number 1932 OR LATER.  This patch replaces patches 1361,
           1405, 1644, 1941, 2040, 2041 2161, 2162, 2254, 2420, 2791.
    
    
    1.3 Bugs Fixed by Patch SG0003356
           This patch contains fixes for the following bugs in IRIX
           6.2, 6.2pacecar, 6.3-O2-10K and 6.4.  Bug numbers from
           Silicon Graphics bug tracking system are included for
           reference.
    
              o Bugs fixed in this patch (3356):
                662332: Missing trace-point
                662241: Incorrect getppid() values
                629902: Preemption warnings with patch 2791
    
              o Bugs fixed in 2791:
                614809: C++ exception handling
                604441: Java VM internal locking integration
                595956: vp_yield() consumes too much CPU
                591261: bad timeout queue order
                585868: sigsuspend/cancellation vp_occlude imbalance
                587649: termination handler cancellation state
                581002: wait() hangs indefinitely while childless
                576526: avoid recursion on signal delivery
                572433: interrupted wait() returns wrong value
                570640: need to initialise fpcsr
                570353: sigaction returns the wrong handler in oact
                565615: pthread_join() should return error on detach
                557446: pthread_create() const pthread_attr_t *
                551386: signal may be mis-delivered
    
    
                550979: pthread_equal() function
                549599: sigignore fix
                545636: fix for destructors
                520527: unexpected return from abort()
                515431: missing cancellation points
                510041: concurrency interface man pages
                501104: system() fails with aio and pthreads
                501099: a.out exists after aio/pthreads program exits
                476184: program using aio and pthreads hangs
                466172: reject blockproc()/unblockproc() calls
    
              o Bugs fixed in 2420:
                533294: Avoid symbol preemption of calloc()
                526820: fork() child identity cleanup
                525427: cancellation/signals deadlock
                523500: fork()/wait() synchronisation
                481944: sigsuspend() race
    
              o Bugs fixed in 2254:
                498816: exceptions do not generate core dumps
                498470: vp starvation under stress
                491107: no more than 1024 pthreads allowed
    
              o Additional (roll-up bug numbers):  485218, 482660,
                482530, 479337, 471918, 468984, 460998, 459551, 445235,
                439648, 439638, 436647, 412725, 360218, 327458.
    
    
    1.4 Subsystems Included in Patch SG0003356
           This patch release includes these subsystems:
    
              o patchSG0003356.eoe_hdr.lib - pthreads header file
                (pthread.h).
    
              o patchSG0003356.eoe_sw.irix_lib - pthreads libraries
                (o32 and n32 versions).
    
              o patchSG0003356.eoe_sw64.lib - pthreads library (n64
                version).
    
              o patchSG0003356.eoe_man.unix - pthreads-related man
                pages.
    
    
    1.5 General Notes
              o Pthread concurrency: by default the pthreads run-time
                adjusts the number of kernel execution contexts
                dynamically according to application behaviour.  The
                interfaces pthread_setconcurrency() and
                pthread_getconcurrency() provide a way to influence
                this behaviour - see the man page for details.
    
    
              o Pthread limits: the default limit on the number of
                pthreads is 1024.  This limit may be raised using a new
                rlimit resource RLIMIT_PTHREAD.  The getrlimit(2) and
                setrlimit(2) interfaces may be used to query and change
                the limit.  The current soft limit is 1024 and the hard
                limit 10240.  At this time the API is a library
                construct; shells, systune and inheritance properties
                are not supported.
    
                In future releases the (default) hard limit will be
                lowered but will be tunable with systune.  Shells and
                inheritance will also be fixed.
    
              o Core dumps: as a debugging aid, setting the environment
                variable "PT_CORE" will cause the library to act on
                exceptions encountered in the library code.  The
                purpose is solely to permit generation of a core dump
                and no other behaviour should be attempted.
    
              o Run-time loader dependency: if this patch is installed
                without the correct rld patch then pthread applications
                will fail at load time with the following message:
    
                rld: Fatal Error: _rld_new_interface: bad operation: 12
    
              o Pthread library load address: problems have been
                observed regarding the address chosen to load the
                pthread library.  This can manifest itself as a memory
                allocation failure for large allocations (typically
                greater than 800Mb).  A workaround for this problem is
                to modify the so_locations files prior to installing
                the patch as follows:
    
                   - locate the SGI DSO range, for example:
                     $range 0x02000000, 0x08000000:\
    
                   - find the libpthread entry:
                     libpthread.so \
                      :st = .text ...
                      :st = .data ...
    
                   - replace the .text and .data lines with the range:
                     libpthread.so \
                      $range 0x02000000, 0x08000000:\
    
                   - install the patch as usual
                The address used to load the library can be found using
                elfdump with the -L argument to retrieve the BASEADDR
                value.
    
    
              o 6.2 Supplementary documentation:  A postscript file
                containing an updated version of chapter 3 of Topics in
                IRIX Programming describes the POSIX threads model in
                more detail.  It can be found in
                /usr/relnotes/patchSG0003356/ch3.parallel.ps.
    
              o Debugging:  WorkShop 2.6.2 and dbx 7.0 are pthread-
                aware.
    
              o Performance tools:  SpeedShop patch number 1809 OR
                HIGHER is recommended for pthreads.
    
              o 6.2 OpenGL: Applications using OpenGL under IRIX 6.2
                cannot use pthreads.  Later versions of IRIX function
                correctly.
    
              o Sprocs: Sprocs use a fundamentally different
                programming model and as such do not interact well with
                pthreads.  Rather than have ill-defined semantics, a
                pthreads program does not support the sproc(),
                sprocsp() calls or the arena synchronisation primitives
                usconfig(3P).
    
              o Dynamic loading: loading the libpthread DSO or loading
                a DSO depending on libpthread into to application which
                is not linked with the pthread library is not
                supported.  Symbols that libpthread preempts are not
                (by default) re-evaluated following the dynamic load
                and may therefore be incorrect.
    
    
    1.6 Installation Instructions
           Patch software is installed like any other Silicon Graphics
           software product.  Follow the instructions in your Software
           Installation Administrator's Guide to bring up the miniroot
           form of the software installation tools.
    
           Note that by default, patch software is not installed and
           must be explicitly selected.
    
           Follow these steps to select a patch for installation:
    
             1.  At the Inst> prompt, type
    
                 install patchSGxxxxxxx
    
                 where xxxxxxx is the patch number.
    
             2.  Initiate the installation sequence. Type
    
    
                 Inst> go
    
             3.  You may find that two patches have been marked as
                 incompatible.  (The installation tools reject an
                 installation request if an incompatibility is
                 detected.)  If this occurs, you must deselect one of
                 the patches.
    
                 Inst> keep patchSGxxxxxxx
    
                 where xxxxxxx is the patch number.
    
             4.  After completing the installation process, exit the
                 inst program by typing
    
                 Inst> quit
    
    
    1.7 Patch Removal Instructions
           To remove a patch, use the versions remove command as you
           would for any other software subsystem.  The removal process
           reinstates the original version of software unless you have
           specifically removed the patch history from your system.
    
           versions remove patchSGxxxxxxx
    
           where xxxxxxx is the patch number.
    
           To keep a patch but increase your disk space, use the
           versions removehist command to remove the patch history.
    
           versions removehist patchSGxxxxxxx
    
           where xxxxxxx is the patch number.
    
    

    INST SUBSYSTEM REQUIREMENTS
    No Requirements Information Available.
    

    INST SUBSYSTEM CHECKSUMS

    These checksums help to provide a 'signature' for the patch inst image which can be used to authenticate other inst images. You can obtain this kind of output by running sum -r on the image (from the command line):

    12343      7   patchSG0003356.eoe_hdr
    02827    145   patchSG0003356.eoe_man
    16677     18 patch/README.patch.3356
    53344    243   patchSG0003356.eoe_sw64
    28125     11   patchSG0003356
    24505    664   patchSG0003356.eoe_sw
    

    INST SUBSYSTEM FILE LISTINGS

    The following lists the files which get installed from each subsystem in the patch:

    patchSG0003356.eoe_hdr.lib
    usr/include/pthread.h

    patchSG0003356.eoe_man.unix
    usr/share/catman/p_man/cat3c/sched_get_priority_max.z
    usr/share/catman/p_man/cat3c/sched_get_priority_min.z
    usr/share/catman/p_man/cat3c/sched_yield.z
    usr/share/catman/p_man/cat3p/pthread_atfork.z
    usr/share/catman/p_man/cat3p/pthread_attr_destroy.z
    usr/share/catman/p_man/cat3p/pthread_attr_getdetachstate.z
    usr/share/catman/p_man/cat3p/pthread_attr_getinheritsched.z
    usr/share/catman/p_man/cat3p/pthread_attr_getschedparam.z
    usr/share/catman/p_man/cat3p/pthread_attr_getschedpolicy.z
    usr/share/catman/p_man/cat3p/pthread_attr_getscope.z
    usr/share/catman/p_man/cat3p/pthread_attr_getstackaddr.z
    usr/share/catman/p_man/cat3p/pthread_attr_getstacksize.z
    usr/share/catman/p_man/cat3p/pthread_attr_init.z
    usr/share/catman/p_man/cat3p/pthread_attr_setdetachstate.z
    usr/share/catman/p_man/cat3p/pthread_attr_setinheritsched.z
    usr/share/catman/p_man/cat3p/pthread_attr_setschedparam.z
    usr/share/catman/p_man/cat3p/pthread_attr_setschedpolicy.z
    usr/share/catman/p_man/cat3p/pthread_attr_setscope.z
    usr/share/catman/p_man/cat3p/pthread_attr_setstackaddr.z
    usr/share/catman/p_man/cat3p/pthread_attr_setstacksize.z
    usr/share/catman/p_man/cat3p/pthread_cancel.z
    usr/share/catman/p_man/cat3p/pthread_cleanup_pop.z
    usr/share/catman/p_man/cat3p/pthread_cleanup_push.z
    usr/share/catman/p_man/cat3p/pthread_cond_broadcast.z
    usr/share/catman/p_man/cat3p/pthread_cond_destroy.z
    usr/share/catman/p_man/cat3p/pthread_cond_init.z
    usr/share/catman/p_man/cat3p/pthread_cond_signal.z
    usr/share/catman/p_man/cat3p/pthread_cond_timedwait.z
    usr/share/catman/p_man/cat3p/pthread_cond_wait.z
    usr/share/catman/p_man/cat3p/pthread_condattr_destroy.z
    usr/share/catman/p_man/cat3p/pthread_condattr_init.z
    usr/share/catman/p_man/cat3p/pthread_create.z
    usr/share/catman/p_man/cat3p/pthread_detach.z
    usr/share/catman/p_man/cat3p/pthread_equal.z
    usr/share/catman/p_man/cat3p/pthread_exit.z
    usr/share/catman/p_man/cat3p/pthread_getschedparam.z
    usr/share/catman/p_man/cat3p/pthread_getspecific.z
    usr/share/catman/p_man/cat3p/pthread_join.z
    usr/share/catman/p_man/cat3p/pthread_key_create.z
    usr/share/catman/p_man/cat3p/pthread_key_delete.z
    usr/share/catman/p_man/cat3p/pthread_kill.z
    usr/share/catman/p_man/cat3p/pthread_mutex_destroy.z
    usr/share/catman/p_man/cat3p/pthread_mutex_getprioceiling.z
    usr/share/catman/p_man/cat3p/pthread_mutex_init.z
    usr/share/catman/p_man/cat3p/pthread_mutex_lock.z
    usr/share/catman/p_man/cat3p/pthread_mutex_setprioceiling.z
    usr/share/catman/p_man/cat3p/pthread_mutex_trylock.z
    usr/share/catman/p_man/cat3p/pthread_mutex_unlock.z
    usr/share/catman/p_man/cat3p/pthread_mutexattr_destroy.z
    usr/share/catman/p_man/cat3p/pthread_mutexattr_getprioceiling.z
    usr/share/catman/p_man/cat3p/pthread_mutexattr_getprotocol.z
    usr/share/catman/p_man/cat3p/pthread_mutexattr_init.z
    usr/share/catman/p_man/cat3p/pthread_mutexattr_setprioceiling.z
    usr/share/catman/p_man/cat3p/pthread_mutexattr_setprotocol.z
    usr/share/catman/p_man/cat3p/pthread_once.z
    usr/share/catman/p_man/cat3p/pthread_self.z
    usr/share/catman/p_man/cat3p/pthread_setcancelstate.z
    usr/share/catman/p_man/cat3p/pthread_setcanceltype.z
    usr/share/catman/p_man/cat3p/pthread_setconcurrency.z
    usr/share/catman/p_man/cat3p/pthread_setschedparam.z
    usr/share/catman/p_man/cat3p/pthread_setspecific.z
    usr/share/catman/p_man/cat3p/pthread_sigmask.z
    usr/share/catman/p_man/cat3p/pthread_testcancel.z

    patchSG0003356.eoe_sw.irix_lib
    usr/lib/libpthread.so
    usr/lib32/libpthread.so
    usr/relnotes/patchSG0003356/TC
    usr/relnotes/patchSG0003356/ch1.z
    usr/relnotes/patchSG0003356/ch3.parallel.ps

    patchSG0003356.eoe_sw64.lib
    usr/lib64/libpthread.so


    DOWNLOAD PATCH
    Download Server File Name Date Added Size Download
    download.sgi.com patchSG0003356.tar 04-Feb-1999 573 K FTP HTTP Add to download cart 
    download.sgi.com patchSG0003356.tardist 04-Feb-1999 573 K FTP HTTP
     
    FTP = download using FTP protocol
    HTTP = download using HTTP protocol
    Add to shopping list= store in your basket for downloading later
  •  


    Document Id: 20021117072913-IRIXPatch-1297