NGPT - Next Generation POSIX Threading ChangeLog ========= This is the list of all(!) changes to this source tree. For a list of just the user-visible and/or major changes please have a look at the NEWS file. _ ___ / | / _ \ | || | | | | || |_| | __|_(_)___/_____________________________________________________________ Changes between 1.0.0 and 1.0.1 *) HACKING: Added libpthread.Versions link edit script for glibc compatibility. [Bill Abt] *) INSTALL: Update install instructions. Update defaults for configure. [Bill Abt] *) Makefile.in: Added libpthread.Versions link edit script for glibc compatibility. Fix install problem for pth_p.h. [Bill Abt] *) MILESTONES: *) README: *) RELEASE: *) TODO: *) configure.in: *) ngpt.spec: *) pth_vers.c: Update for 1.0.1 [Bill Abt] *) ltconfig: Added LDFLAGS as parameter to archive command so as to accomodate the link edit version script. [Bill Abt] *) ltmain.sh: Check for the presence of the .Versions file and pass along to the linker if found. [Bill Abt] *) pth_lib.c: Start the watchdog thread if the we are running with more than 1 native thread. [Bill Abt] *) pth_native.c: Added support for watchdog thread when in M:N mode. This area still needs some more work. [Bill Abt] *) pth_p.h.in: glibc compatibility: Added macro to support creating versioned symbols as required by glibc. [Bill Abt] *) pth_sched.c: Added scheduler lock to correct load problems on SMP. [Bill Abt] *) pth_syscall.c: glibc compatibility: Added more ghosted glibc functions that are expected by glibc to be ghosted. [Bill Abt] *) pthread.c: glibc compatibility: Changed some entry point name and added use of versioned symbols for some functions. Added additional strong aliases for new ghosted functions. [Bill Abt] *) pthread.h.in: glibc compatibility: Changed some external values to match those in use by LinuxThreads to improve binary compatibility. [Bill Abt] *) test_pthread.c: *) test_pthread_segv.c: *) test_std.c: Removed use of gettid() function in test programs. [Bill Abt] Changes between 0.9.6 and 1.0.0 *) General: Change the way pth_native_list is addressed. Added additional debug statements. [Bill Abt] *) pth_p.h.in: Added new qlocks to the mutex and cond structures. Added include of sys/mman.h for mmap/munmap. [Bill Abt] *) pth_attr.c: *) pth_clean.c: *) pth_data.c: *) pth_event.c: *) pth_ext.c: *) pth_high.c: *) pth_msg.c: Changed from using malloc/free to pth_malloc/pth_free. [Bill Abt] *) pth_data.c: Added new lock for debug operations. [Bill Abt] *) pth.h.in: Fix description of qlock. [Bill Abt] *) INSTALL: Update quick install directions. [Bill Abt] *) pth_lib.c: Added pth_malloc using mmap(). Added pth_free using munmap(). Added code to initialize native descriptor list. Fixed alogorithm for counting running threads to include threads running on other native threads. Removed the restriction that new native threads can only be created on the first native thread. Fixed pth_getcontext() to accomodate other context switching methods. Moved most of the work of pth_thread_cleanup to pth_tcb_free() to fix chicken and egg problem on SMP ;-) Added soft wrapper for exit(). [Bill Abt] *) pth_mctx.c: Changed from using malloc/free to pth_malloc/pth_free. Added new lock for SIGUSR1 operations. [Bill Abt] *) pth_pqueue.c: Moved definition of qlock to pth_p.h.in as usage has expanded. [Bill Abt] *) pth_sync.c: Added new locks to mutex and conditions and code to acquire and release them as appropriate. [Bill Abt] *) pth_syscall.c: Added hard wrapper for syscall exit(). [Bill Abt] *) pth_tcb.c: Changed from using malloc/free to pth_malloc/pth_free. Added thread lock. Added code to remove pending timers from other native threads that are waiting upon a newly expired thread. Added code to destroy key data during the free of a thread. [Bill Abt] *) pth_native.c: Changed from using malloc/free to mmap/munmap. Added is_used, nexttimer_thread and stack_top members. Changed the way pth_native_list is addressed. Fixed parameter for clone() to use stack_top rather than bottom. [Bill Abt] *) pth_native.c: Change the order in which native threads are cleaned up. [Saurabh Desai] *) pth_sched.c: Changed from using malloc/free to mmap/munmap. Made pth_native_list static. Changed the way pth_native_list is addressed. More debug info is outputted. Moved nexttimer_thread to be native specific so cleanup can be handled properly. [Bill Abt] *) pth_sched.c: Made sure nexttimer_ev are only handled once. [Saurabh Desai] *) pth_sched.c: Added code to ensure that other native threads who are waiting in the scheduler are awakened when the load dictates. [Dave McCracken] *) pthread.c: Added pthread_initialize() so glibc can call it during initialization. Added a lock for use during initialization. Added an array of static mutexes for used during initialization. Changed mutex ops to work w/o memory allocation (at least for a little while) during initialization. Changed from using malloc/free to pth_malloc/pth_free. [Bill Abt] ___ ___ / _ \ / _ \ | | | | (_) | | |_| |\__, | ___\___(_) /_/__________________________________________________________ Changes between 0.9.5 and 0.9.6 *) In test cases, general code cleanup. Remove restart, no longer valid to shutdown and restart. Fix compiler warning in test cases. [Bill Abt, Saurabh Desai] *) pthread.c: Added new mlock to allow for early mutex usage by threadsafe glibc malloc. Added strong aliases for pthread_mutex_xxxx routines so that glibc can detect and use the threadsafe versions of library functions. [Bill Abt] *) pth_sync: Added additional debug statements. [Bill Abt] *) pth_pqueue.c: Changed definition of a lock to track owner and to allow nested lock operations. [Bill Abt] *) pthread.c: Added pth_lock_all() and pth_release_all() macros for locking all the queues in a single operation. Added defintion of strong_alias macro to allow strong aliasing of certain pthread_xxxx functions to allow glibc to detect and therefore use threadsafe versions of functions. [Bill Abt] *) pth_native.c: Added use of new tkill() function instead of stock kill(). Changed the way pth_alloc_native works so that slot is no longer needed to be passed as a parameter. Cleanup error checking in general and the actual native cleanup methods. Pass the actual native descriptor to clone (and subsequently to the pth_new_scheduler()) instead of slot. Added locks when modifying the contents of the native descriptor. Made gettid(), tkill() and pth_testandset() inline functions. Improved pth_XXXXXX_lock functions to allow owner tracking and nested locking by the owner. Removed unused function, pth_compare_and_swap. [Bill Abt] *) pth_mctx.c: Changed to use tkill() instead of kill() when signalling. [Bill Abt] *) pth_cancel.c: Added new locks around access to various queues. [Bill Abt] *) pth_data.c: Added locks to protect multiple access to key data. [Bill Abt] *) pth_event.c: Added locks to protect multiple access to key data. [Bill Abt *) pth_high: Changed pth_sigmask to always set remembered signal mask. Changed pth_sigmask to calculate new signal mask whenever the mask is changed. Changed pth_sigmask and pth_sigwait_ev to wake up the first native thread whenever a change is made or pth_wait is about to be called. [Saurabh Desai] *) pth_lib.c: Added locks to protect multiple access to queue data. Added new flags to indicate initialization and shutdown in progress and code to set/unset appropriately. Deferred the determination of library maximums until after the scheduler has been initialized In pth_kill() and pth_exit(), bind the user thread to the first native and wake up the first native so the operation completes on the first native thread. [Bill Abt, Saurabh Desai] *) pth_sched.c: Added various locks to prevent multiple access to data. [Bill Abt, Saurabh Desai] *) pth_sched.c: Added pth_allthread_mask() function used to re-calculate the signal mask when it is changed. Changed from using kill() to send a signal to using tkill(). [Saurabh Desai] *) pth_sched.c: Remove unused arrays. Added static definition of first native descriptor so that malloc need not be called prior to library initialization. Added code to use static definition of first native descriptor. In pth_scheduler(), if there are no items ready to run, go to the event manager and wait. Added additional debug statements. [Bill Abt] Changes between 0.9.4 and 0.9.5 *) Added new headers, bits/sigthread.h and bits/pthreadtypes.h [Bill Abt] *) Added new test cases for pthreads: test_pthread_sig, test_pthread_segv, test_pthread_cancel. [Saurabh Desai, Bill Abt] *) .aliases - Changed bt macro to do a make & make test so that a build will not continue if errors are encountered. [Bill Abt] *) pth_cancel.c - Changed pth_cancel_state() so that if the current cancel state is PTH_CANCEL_ASYNCHRONOUS, a yield will done to allow the scheduler a chance to run. This corrects a problem found when using the pthread cancellation API. [Bill Abt, Saurabh Desai] *) pth_cancel.c = Changed pth_cancel_point(), called by pthread_testcancel(), to yield to the scheduler if the current thread is not in a cancel state and a cancel request is not pending. This corrects a problem found when testing the pthread cancellation API on a UP machine. [Bill Abt, Saurabh Desai] *) pth_native.c - In pth_new_native(), corrected a problem whereby the slot number being passed via clone() to the new scheduler was passed as a stack based variable. This variable is now allocated from the heap. [Arun Sharma, ] *) pth_native.c - In pth_new_native(), corrected a problem whereby the number of native threads was not decremented in the event of a failure to allocate or clone. [Saurabh Desai, Bill Abt] *) pth_native.c - Added support for IA64. [Nick Pollitt] Changes between 0.9.3 and 0.9.4 *) Corrected problems with signal handling. The signal mask was not being inherited properly from thread to thread. This cause pthread_sigmask to fail in some instances. [Bill Abt, Saurabh Desai] *) Removed the change to the clone() parameters in pth_native.c The peer relationship between threads is now established in the kernel patch. [Bill Abt] Changes between 0.9.2 and 0.9.3 *) Changed clone parameters in pth_native.c to include the undocumented CLONE_PARENT. This will establish a true peer relationship among threads in a process. [Saurabh Desai, Bill Abt] Changes between 0.9.1 and 0.9.2 *) Added support for S/390 to pth_native.c (Thanks to Neale Ferguson of Software AG for his contribution.) [Neale Ferguson] *) Added kernel patch for 2.4.0 to complete implementation of the CLONE_THREAD functionality of the clone() api that was introduced in the 2.4 Linux kernel. [Bill Abt, Saurabh Desai] *) Added new build option to configure (--enable-kernel-patch) that will the user build and use NGPT with the accompanying kernel patch or continue to run with an unpatched kernel. Enabling this feature without first applying the patch is NOT RECOMMENDED and will result in an internal library crash. *) Changed pth_new_native() so that the CLONE_THREAD flag is passed. *) Changed from the use of getpid() to get the process id to gettid(), a new system called added by the patch, that returns the native thread id. *) Improved the pth_bindtonative function in pth_lib.c *) Improved the alogrithm where new native threads are launched to better utilize system resources. [Bill Abt] Changes between 0.9.0 and 0.9.1 *) POSIX/Single UNIX Spec Required Changes: added pthread_attr_setguardsize, currently returns ENOSYS. added pthread_attr_getguardsize, currently returns ENOSYS. added pthread_setconcurrency, currently returns success. added pthread_getconcurrency, currently returns 0 or value set with previous call to pthread_setcurrency. added # defines as required by the POSIX specification. *) Removed ngpt headers and config from development spec in rpm spec file. These are for internal use only. *) Added a .aliases file that can be sourced to make life easier when working with the NGPT source. [Bill Abt] Changes between 0.0.0 and 0.9.0 *) Initial release [Bill Abt]