Revision: 9491 http://pure-data.svn.sourceforge.net/pure-data/?rev=9491&view=rev Author: eighthave Date: 2008-02-22 09:25:55 -0800 (Fri, 22 Feb 2008)
Log Message: ----------- importing pthreads-w32-2-8-0-release.exe
Added Paths: ----------- vendor/pthreads/ vendor/pthreads/current/ vendor/pthreads/current/QueueUserAPCEx/ vendor/pthreads/current/QueueUserAPCEx/COPYING.LIB vendor/pthreads/current/QueueUserAPCEx/Readme.txt vendor/pthreads/current/QueueUserAPCEx/driver/ vendor/pthreads/current/QueueUserAPCEx/driver/MAKEFILE vendor/pthreads/current/QueueUserAPCEx/driver/Sources vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.c vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.ini vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.rc vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.reg vendor/pthreads/current/QueueUserAPCEx/driver/install.bat vendor/pthreads/current/QueueUserAPCEx/execs/ vendor/pthreads/current/QueueUserAPCEx/execs/alertdrv.sys vendor/pthreads/current/QueueUserAPCEx/testapp/ vendor/pthreads/current/QueueUserAPCEx/testapp/QueueUserAPCEx.c vendor/pthreads/current/QueueUserAPCEx/testapp/QueueUserAPCEx.h vendor/pthreads/current/QueueUserAPCEx/testapp/testapp.c vendor/pthreads/current/QueueUserAPCEx/testapp/testapp.dsp vendor/pthreads/current/QueueUserAPCEx/user/ vendor/pthreads/current/QueueUserAPCEx/user/GNUmakefile vendor/pthreads/current/QueueUserAPCEx/user/Makefile vendor/pthreads/current/QueueUserAPCEx/user/QueueUserAPCEx.c vendor/pthreads/current/QueueUserAPCEx/user/QueueUserAPCEx.h vendor/pthreads/current/QueueUserAPCEx/user/quserex.lib vendor/pthreads/current/pthreads.2/ vendor/pthreads/current/pthreads.2/ANNOUNCE vendor/pthreads/current/pthreads.2/BUGS vendor/pthreads/current/pthreads.2/Bmakefile vendor/pthreads/current/pthreads.2/CONTRIBUTORS vendor/pthreads/current/pthreads.2/COPYING vendor/pthreads/current/pthreads.2/COPYING.LIB vendor/pthreads/current/pthreads.2/ChangeLog vendor/pthreads/current/pthreads.2/FAQ vendor/pthreads/current/pthreads.2/GNUmakefile vendor/pthreads/current/pthreads.2/MAINTAINERS vendor/pthreads/current/pthreads.2/Makefile vendor/pthreads/current/pthreads.2/NEWS vendor/pthreads/current/pthreads.2/Nmakefile vendor/pthreads/current/pthreads.2/Nmakefile.tests vendor/pthreads/current/pthreads.2/PROGRESS vendor/pthreads/current/pthreads.2/README vendor/pthreads/current/pthreads.2/README.Borland vendor/pthreads/current/pthreads.2/README.CV vendor/pthreads/current/pthreads.2/README.NONPORTABLE vendor/pthreads/current/pthreads.2/README.Watcom vendor/pthreads/current/pthreads.2/README.WinCE vendor/pthreads/current/pthreads.2/TODO vendor/pthreads/current/pthreads.2/WinCE-PORT vendor/pthreads/current/pthreads.2/attr.c vendor/pthreads/current/pthreads.2/barrier.c vendor/pthreads/current/pthreads.2/builddmc.bat vendor/pthreads/current/pthreads.2/cancel.c vendor/pthreads/current/pthreads.2/cleanup.c vendor/pthreads/current/pthreads.2/condvar.c vendor/pthreads/current/pthreads.2/config.h vendor/pthreads/current/pthreads.2/create.c vendor/pthreads/current/pthreads.2/dll.c vendor/pthreads/current/pthreads.2/errno.c vendor/pthreads/current/pthreads.2/exit.c vendor/pthreads/current/pthreads.2/fork.c vendor/pthreads/current/pthreads.2/global.c vendor/pthreads/current/pthreads.2/implement.h vendor/pthreads/current/pthreads.2/manual/ vendor/pthreads/current/pthreads.2/manual/ChangeLog vendor/pthreads/current/pthreads.2/manual/PortabilityIssues.html vendor/pthreads/current/pthreads.2/manual/index.html vendor/pthreads/current/pthreads.2/manual/pthreadCancelableWait.html vendor/pthreads/current/pthreads.2/manual/pthread_attr_init.html vendor/pthreads/current/pthreads.2/manual/pthread_attr_setstackaddr.html vendor/pthreads/current/pthreads.2/manual/pthread_attr_setstacksize.html vendor/pthreads/current/pthreads.2/manual/pthread_barrier_init.html vendor/pthreads/current/pthreads.2/manual/pthread_barrier_wait.html vendor/pthreads/current/pthreads.2/manual/pthread_barrierattr_init.html vendor/pthreads/current/pthreads.2/manual/pthread_barrierattr_setpshared.html vendor/pthreads/current/pthreads.2/manual/pthread_cancel.html vendor/pthreads/current/pthreads.2/manual/pthread_cleanup_push.html vendor/pthreads/current/pthreads.2/manual/pthread_cond_init.html vendor/pthreads/current/pthreads.2/manual/pthread_condattr_init.html vendor/pthreads/current/pthreads.2/manual/pthread_condattr_setpshared.html vendor/pthreads/current/pthreads.2/manual/pthread_create.html vendor/pthreads/current/pthreads.2/manual/pthread_delay_np.html vendor/pthreads/current/pthreads.2/manual/pthread_detach.html vendor/pthreads/current/pthreads.2/manual/pthread_equal.html vendor/pthreads/current/pthreads.2/manual/pthread_exit.html vendor/pthreads/current/pthreads.2/manual/pthread_getw32threadhandle_np.html vendor/pthreads/current/pthreads.2/manual/pthread_join.html vendor/pthreads/current/pthreads.2/manual/pthread_key_create.html vendor/pthreads/current/pthreads.2/manual/pthread_kill.html vendor/pthreads/current/pthreads.2/manual/pthread_mutex_init.html vendor/pthreads/current/pthreads.2/manual/pthread_mutexattr_init.html vendor/pthreads/current/pthreads.2/manual/pthread_mutexattr_setpshared.html vendor/pthreads/current/pthreads.2/manual/pthread_num_processors_np.html vendor/pthreads/current/pthreads.2/manual/pthread_once.html vendor/pthreads/current/pthreads.2/manual/pthread_rwlock_init.html vendor/pthreads/current/pthreads.2/manual/pthread_rwlock_rdlock.html vendor/pthreads/current/pthreads.2/manual/pthread_rwlock_timedrdlock.html vendor/pthreads/current/pthreads.2/manual/pthread_rwlock_timedwrlock.html vendor/pthreads/current/pthreads.2/manual/pthread_rwlock_unlock.html vendor/pthreads/current/pthreads.2/manual/pthread_rwlock_wrlock.html vendor/pthreads/current/pthreads.2/manual/pthread_rwlockattr_init.html vendor/pthreads/current/pthreads.2/manual/pthread_rwlockattr_setpshared.html vendor/pthreads/current/pthreads.2/manual/pthread_self.html vendor/pthreads/current/pthreads.2/manual/pthread_setcancelstate.html vendor/pthreads/current/pthreads.2/manual/pthread_setcanceltype.html vendor/pthreads/current/pthreads.2/manual/pthread_setconcurrency.html vendor/pthreads/current/pthreads.2/manual/pthread_setschedparam.html vendor/pthreads/current/pthreads.2/manual/pthread_spin_init.html vendor/pthreads/current/pthreads.2/manual/pthread_spin_lock.html vendor/pthreads/current/pthreads.2/manual/pthread_spin_unlock.html vendor/pthreads/current/pthreads.2/manual/pthread_timechange_handler_np.html vendor/pthreads/current/pthreads.2/manual/pthread_win32_attach_detach_np.html vendor/pthreads/current/pthreads.2/manual/pthread_win32_test_features_np.html vendor/pthreads/current/pthreads.2/manual/sched_get_priority_max.html vendor/pthreads/current/pthreads.2/manual/sched_getscheduler.html vendor/pthreads/current/pthreads.2/manual/sched_setscheduler.html vendor/pthreads/current/pthreads.2/manual/sched_yield.html vendor/pthreads/current/pthreads.2/manual/sem_init.html vendor/pthreads/current/pthreads.2/misc.c vendor/pthreads/current/pthreads.2/mutex.c vendor/pthreads/current/pthreads.2/need_errno.h vendor/pthreads/current/pthreads.2/nonportable.c vendor/pthreads/current/pthreads.2/private.c vendor/pthreads/current/pthreads.2/pthread.c vendor/pthreads/current/pthreads.2/pthread.dsp vendor/pthreads/current/pthreads.2/pthread.dsw vendor/pthreads/current/pthreads.2/pthread.h vendor/pthreads/current/pthreads.2/pthread_attr_destroy.c vendor/pthreads/current/pthreads.2/pthread_attr_getdetachstate.c vendor/pthreads/current/pthreads.2/pthread_attr_getinheritsched.c vendor/pthreads/current/pthreads.2/pthread_attr_getschedparam.c vendor/pthreads/current/pthreads.2/pthread_attr_getschedpolicy.c vendor/pthreads/current/pthreads.2/pthread_attr_getscope.c vendor/pthreads/current/pthreads.2/pthread_attr_getstackaddr.c vendor/pthreads/current/pthreads.2/pthread_attr_getstacksize.c vendor/pthreads/current/pthreads.2/pthread_attr_init.c vendor/pthreads/current/pthreads.2/pthread_attr_setdetachstate.c vendor/pthreads/current/pthreads.2/pthread_attr_setinheritsched.c vendor/pthreads/current/pthreads.2/pthread_attr_setschedparam.c vendor/pthreads/current/pthreads.2/pthread_attr_setschedpolicy.c vendor/pthreads/current/pthreads.2/pthread_attr_setscope.c vendor/pthreads/current/pthreads.2/pthread_attr_setstackaddr.c vendor/pthreads/current/pthreads.2/pthread_attr_setstacksize.c vendor/pthreads/current/pthreads.2/pthread_barrier_destroy.c vendor/pthreads/current/pthreads.2/pthread_barrier_init.c vendor/pthreads/current/pthreads.2/pthread_barrier_wait.c vendor/pthreads/current/pthreads.2/pthread_barrierattr_destroy.c vendor/pthreads/current/pthreads.2/pthread_barrierattr_getpshared.c vendor/pthreads/current/pthreads.2/pthread_barrierattr_init.c vendor/pthreads/current/pthreads.2/pthread_barrierattr_setpshared.c vendor/pthreads/current/pthreads.2/pthread_cancel.c vendor/pthreads/current/pthreads.2/pthread_cond_destroy.c vendor/pthreads/current/pthreads.2/pthread_cond_init.c vendor/pthreads/current/pthreads.2/pthread_cond_signal.c vendor/pthreads/current/pthreads.2/pthread_cond_wait.c vendor/pthreads/current/pthreads.2/pthread_condattr_destroy.c vendor/pthreads/current/pthreads.2/pthread_condattr_getpshared.c vendor/pthreads/current/pthreads.2/pthread_condattr_init.c vendor/pthreads/current/pthreads.2/pthread_condattr_setpshared.c vendor/pthreads/current/pthreads.2/pthread_delay_np.c vendor/pthreads/current/pthreads.2/pthread_detach.c vendor/pthreads/current/pthreads.2/pthread_equal.c vendor/pthreads/current/pthreads.2/pthread_exit.c vendor/pthreads/current/pthreads.2/pthread_getconcurrency.c vendor/pthreads/current/pthreads.2/pthread_getschedparam.c vendor/pthreads/current/pthreads.2/pthread_getspecific.c vendor/pthreads/current/pthreads.2/pthread_getw32threadhandle_np.c vendor/pthreads/current/pthreads.2/pthread_join.c vendor/pthreads/current/pthreads.2/pthread_key_create.c vendor/pthreads/current/pthreads.2/pthread_key_delete.c vendor/pthreads/current/pthreads.2/pthread_kill.c vendor/pthreads/current/pthreads.2/pthread_mutex_destroy.c vendor/pthreads/current/pthreads.2/pthread_mutex_init.c vendor/pthreads/current/pthreads.2/pthread_mutex_lock.c vendor/pthreads/current/pthreads.2/pthread_mutex_timedlock.c vendor/pthreads/current/pthreads.2/pthread_mutex_trylock.c vendor/pthreads/current/pthreads.2/pthread_mutex_unlock.c vendor/pthreads/current/pthreads.2/pthread_mutexattr_destroy.c vendor/pthreads/current/pthreads.2/pthread_mutexattr_getkind_np.c vendor/pthreads/current/pthreads.2/pthread_mutexattr_getpshared.c vendor/pthreads/current/pthreads.2/pthread_mutexattr_gettype.c vendor/pthreads/current/pthreads.2/pthread_mutexattr_init.c vendor/pthreads/current/pthreads.2/pthread_mutexattr_setkind_np.c vendor/pthreads/current/pthreads.2/pthread_mutexattr_setpshared.c vendor/pthreads/current/pthreads.2/pthread_mutexattr_settype.c vendor/pthreads/current/pthreads.2/pthread_num_processors_np.c vendor/pthreads/current/pthreads.2/pthread_once.c vendor/pthreads/current/pthreads.2/pthread_once.x vendor/pthreads/current/pthreads.2/pthread_rwlock_destroy.c vendor/pthreads/current/pthreads.2/pthread_rwlock_init.c vendor/pthreads/current/pthreads.2/pthread_rwlock_rdlock.c vendor/pthreads/current/pthreads.2/pthread_rwlock_timedrdlock.c vendor/pthreads/current/pthreads.2/pthread_rwlock_timedwrlock.c vendor/pthreads/current/pthreads.2/pthread_rwlock_tryrdlock.c vendor/pthreads/current/pthreads.2/pthread_rwlock_trywrlock.c vendor/pthreads/current/pthreads.2/pthread_rwlock_unlock.c vendor/pthreads/current/pthreads.2/pthread_rwlock_wrlock.c vendor/pthreads/current/pthreads.2/pthread_rwlockattr_destroy.c vendor/pthreads/current/pthreads.2/pthread_rwlockattr_getpshared.c vendor/pthreads/current/pthreads.2/pthread_rwlockattr_init.c vendor/pthreads/current/pthreads.2/pthread_rwlockattr_setpshared.c vendor/pthreads/current/pthreads.2/pthread_self.c vendor/pthreads/current/pthreads.2/pthread_setcancelstate.c vendor/pthreads/current/pthreads.2/pthread_setcanceltype.c vendor/pthreads/current/pthreads.2/pthread_setconcurrency.c vendor/pthreads/current/pthreads.2/pthread_setschedparam.c vendor/pthreads/current/pthreads.2/pthread_setspecific.c vendor/pthreads/current/pthreads.2/pthread_spin_destroy.c vendor/pthreads/current/pthreads.2/pthread_spin_init.c vendor/pthreads/current/pthreads.2/pthread_spin_lock.c vendor/pthreads/current/pthreads.2/pthread_spin_trylock.c vendor/pthreads/current/pthreads.2/pthread_spin_unlock.c vendor/pthreads/current/pthreads.2/pthread_testcancel.c vendor/pthreads/current/pthreads.2/pthread_timechange_handler_np.c vendor/pthreads/current/pthreads.2/pthread_win32_attach_detach_np.c vendor/pthreads/current/pthreads.2/ptw32_InterlockedCompareExchange.c vendor/pthreads/current/pthreads.2/ptw32_MCS_lock.c vendor/pthreads/current/pthreads.2/ptw32_callUserDestroyRoutines.c vendor/pthreads/current/pthreads.2/ptw32_calloc.c vendor/pthreads/current/pthreads.2/ptw32_cond_check_need_init.c vendor/pthreads/current/pthreads.2/ptw32_getprocessors.c vendor/pthreads/current/pthreads.2/ptw32_is_attr.c vendor/pthreads/current/pthreads.2/ptw32_mutex_check_need_init.c vendor/pthreads/current/pthreads.2/ptw32_new.c vendor/pthreads/current/pthreads.2/ptw32_processInitialize.c vendor/pthreads/current/pthreads.2/ptw32_processTerminate.c vendor/pthreads/current/pthreads.2/ptw32_relmillisecs.c vendor/pthreads/current/pthreads.2/ptw32_reuse.c vendor/pthreads/current/pthreads.2/ptw32_rwlock_cancelwrwait.c vendor/pthreads/current/pthreads.2/ptw32_rwlock_check_need_init.c vendor/pthreads/current/pthreads.2/ptw32_semwait.c vendor/pthreads/current/pthreads.2/ptw32_spinlock_check_need_init.c vendor/pthreads/current/pthreads.2/ptw32_threadDestroy.c vendor/pthreads/current/pthreads.2/ptw32_threadStart.c vendor/pthreads/current/pthreads.2/ptw32_throw.c vendor/pthreads/current/pthreads.2/ptw32_timespec.c vendor/pthreads/current/pthreads.2/ptw32_tkAssocCreate.c vendor/pthreads/current/pthreads.2/ptw32_tkAssocDestroy.c vendor/pthreads/current/pthreads.2/rwlock.c vendor/pthreads/current/pthreads.2/sched.c vendor/pthreads/current/pthreads.2/sched.h vendor/pthreads/current/pthreads.2/sched_get_priority_max.c vendor/pthreads/current/pthreads.2/sched_get_priority_min.c vendor/pthreads/current/pthreads.2/sched_getscheduler.c vendor/pthreads/current/pthreads.2/sched_setscheduler.c vendor/pthreads/current/pthreads.2/sched_yield.c vendor/pthreads/current/pthreads.2/sem_close.c vendor/pthreads/current/pthreads.2/sem_destroy.c vendor/pthreads/current/pthreads.2/sem_getvalue.c vendor/pthreads/current/pthreads.2/sem_init.c vendor/pthreads/current/pthreads.2/sem_open.c vendor/pthreads/current/pthreads.2/sem_post.c vendor/pthreads/current/pthreads.2/sem_post_multiple.c vendor/pthreads/current/pthreads.2/sem_timedwait.c vendor/pthreads/current/pthreads.2/sem_trywait.c vendor/pthreads/current/pthreads.2/sem_unlink.c vendor/pthreads/current/pthreads.2/sem_wait.c vendor/pthreads/current/pthreads.2/semaphore.c vendor/pthreads/current/pthreads.2/semaphore.h vendor/pthreads/current/pthreads.2/signal.c vendor/pthreads/current/pthreads.2/spin.c vendor/pthreads/current/pthreads.2/sync.c vendor/pthreads/current/pthreads.2/tests/ vendor/pthreads/current/pthreads.2/tests/.once3.c.swp vendor/pthreads/current/pthreads.2/tests/Bmakefile vendor/pthreads/current/pthreads.2/tests/ChangeLog vendor/pthreads/current/pthreads.2/tests/Debug.dsp vendor/pthreads/current/pthreads.2/tests/Debug.dsw vendor/pthreads/current/pthreads.2/tests/Debug.plg vendor/pthreads/current/pthreads.2/tests/Debug.txt vendor/pthreads/current/pthreads.2/tests/GNUmakefile vendor/pthreads/current/pthreads.2/tests/Makefile vendor/pthreads/current/pthreads.2/tests/README.BENCHTESTS vendor/pthreads/current/pthreads.2/tests/SIZES.VCE vendor/pthreads/current/pthreads.2/tests/Wmakefile vendor/pthreads/current/pthreads.2/tests/barrier1.c vendor/pthreads/current/pthreads.2/tests/barrier2.c vendor/pthreads/current/pthreads.2/tests/barrier3.c vendor/pthreads/current/pthreads.2/tests/barrier4.c vendor/pthreads/current/pthreads.2/tests/barrier5.c vendor/pthreads/current/pthreads.2/tests/benchlib.c vendor/pthreads/current/pthreads.2/tests/benchtest.h vendor/pthreads/current/pthreads.2/tests/benchtest1.c vendor/pthreads/current/pthreads.2/tests/benchtest2.c vendor/pthreads/current/pthreads.2/tests/benchtest3.c vendor/pthreads/current/pthreads.2/tests/benchtest4.c vendor/pthreads/current/pthreads.2/tests/benchtest5.c vendor/pthreads/current/pthreads.2/tests/cancel1.c vendor/pthreads/current/pthreads.2/tests/cancel2.c vendor/pthreads/current/pthreads.2/tests/cancel3.c vendor/pthreads/current/pthreads.2/tests/cancel4.c vendor/pthreads/current/pthreads.2/tests/cancel5.c vendor/pthreads/current/pthreads.2/tests/cancel6a.c vendor/pthreads/current/pthreads.2/tests/cancel6d.c vendor/pthreads/current/pthreads.2/tests/cancel7.c vendor/pthreads/current/pthreads.2/tests/cancel8.c vendor/pthreads/current/pthreads.2/tests/cancel9.c vendor/pthreads/current/pthreads.2/tests/cleanup0.c vendor/pthreads/current/pthreads.2/tests/cleanup1.c vendor/pthreads/current/pthreads.2/tests/cleanup2.c vendor/pthreads/current/pthreads.2/tests/cleanup3.c vendor/pthreads/current/pthreads.2/tests/condvar1.c vendor/pthreads/current/pthreads.2/tests/condvar1_1.c vendor/pthreads/current/pthreads.2/tests/condvar1_2.c vendor/pthreads/current/pthreads.2/tests/condvar2.c vendor/pthreads/current/pthreads.2/tests/condvar2_1.c vendor/pthreads/current/pthreads.2/tests/condvar3.c vendor/pthreads/current/pthreads.2/tests/condvar3_1.c vendor/pthreads/current/pthreads.2/tests/condvar3_2.c vendor/pthreads/current/pthreads.2/tests/condvar3_3.c vendor/pthreads/current/pthreads.2/tests/condvar4.c vendor/pthreads/current/pthreads.2/tests/condvar5.c vendor/pthreads/current/pthreads.2/tests/condvar6.c vendor/pthreads/current/pthreads.2/tests/condvar7.c vendor/pthreads/current/pthreads.2/tests/condvar8.c vendor/pthreads/current/pthreads.2/tests/condvar9.c vendor/pthreads/current/pthreads.2/tests/context1.c vendor/pthreads/current/pthreads.2/tests/count1.c vendor/pthreads/current/pthreads.2/tests/create1.c vendor/pthreads/current/pthreads.2/tests/create2.c vendor/pthreads/current/pthreads.2/tests/create3.c vendor/pthreads/current/pthreads.2/tests/delay1.c vendor/pthreads/current/pthreads.2/tests/delay2.c vendor/pthreads/current/pthreads.2/tests/detach1.c vendor/pthreads/current/pthreads.2/tests/equal1.c vendor/pthreads/current/pthreads.2/tests/errno1.c vendor/pthreads/current/pthreads.2/tests/exception1.c vendor/pthreads/current/pthreads.2/tests/exception2.c vendor/pthreads/current/pthreads.2/tests/exception3.c vendor/pthreads/current/pthreads.2/tests/exit1.c vendor/pthreads/current/pthreads.2/tests/exit2.c vendor/pthreads/current/pthreads.2/tests/exit3.c vendor/pthreads/current/pthreads.2/tests/exit4.c vendor/pthreads/current/pthreads.2/tests/exit5.c vendor/pthreads/current/pthreads.2/tests/eyal1.c vendor/pthreads/current/pthreads.2/tests/inherit1.c vendor/pthreads/current/pthreads.2/tests/join0.c vendor/pthreads/current/pthreads.2/tests/join1.c vendor/pthreads/current/pthreads.2/tests/join2.c vendor/pthreads/current/pthreads.2/tests/join3.c vendor/pthreads/current/pthreads.2/tests/kill1.c vendor/pthreads/current/pthreads.2/tests/loadfree.c vendor/pthreads/current/pthreads.2/tests/mkdir/ vendor/pthreads/current/pthreads.2/tests/multiPCcaBetter.c vendor/pthreads/current/pthreads.2/tests/mutex1.c vendor/pthreads/current/pthreads.2/tests/mutex1e.c vendor/pthreads/current/pthreads.2/tests/mutex1n.c vendor/pthreads/current/pthreads.2/tests/mutex1r.c vendor/pthreads/current/pthreads.2/tests/mutex2.c vendor/pthreads/current/pthreads.2/tests/mutex2e.c vendor/pthreads/current/pthreads.2/tests/mutex2r.c vendor/pthreads/current/pthreads.2/tests/mutex3.c vendor/pthreads/current/pthreads.2/tests/mutex3e.c vendor/pthreads/current/pthreads.2/tests/mutex3r.c vendor/pthreads/current/pthreads.2/tests/mutex4.c vendor/pthreads/current/pthreads.2/tests/mutex5.c vendor/pthreads/current/pthreads.2/tests/mutex6.c vendor/pthreads/current/pthreads.2/tests/mutex6e.c vendor/pthreads/current/pthreads.2/tests/mutex6es.c vendor/pthreads/current/pthreads.2/tests/mutex6n.c vendor/pthreads/current/pthreads.2/tests/mutex6r.c vendor/pthreads/current/pthreads.2/tests/mutex6rs.c vendor/pthreads/current/pthreads.2/tests/mutex6s.c vendor/pthreads/current/pthreads.2/tests/mutex7.c vendor/pthreads/current/pthreads.2/tests/mutex7e.c vendor/pthreads/current/pthreads.2/tests/mutex7n.c vendor/pthreads/current/pthreads.2/tests/mutex7r.c vendor/pthreads/current/pthreads.2/tests/mutex8.c vendor/pthreads/current/pthreads.2/tests/mutex8e.c vendor/pthreads/current/pthreads.2/tests/mutex8n.c vendor/pthreads/current/pthreads.2/tests/mutex8r.c vendor/pthreads/current/pthreads.2/tests/once1.c vendor/pthreads/current/pthreads.2/tests/once2.c vendor/pthreads/current/pthreads.2/tests/once3.c vendor/pthreads/current/pthreads.2/tests/once4.c vendor/pthreads/current/pthreads.2/tests/priority1.c vendor/pthreads/current/pthreads.2/tests/priority2.c vendor/pthreads/current/pthreads.2/tests/readme vendor/pthreads/current/pthreads.2/tests/reuse1.c vendor/pthreads/current/pthreads.2/tests/reuse2.c vendor/pthreads/current/pthreads.2/tests/rwlock1.c vendor/pthreads/current/pthreads.2/tests/rwlock2.c vendor/pthreads/current/pthreads.2/tests/rwlock2_t.c vendor/pthreads/current/pthreads.2/tests/rwlock3.c vendor/pthreads/current/pthreads.2/tests/rwlock3_t.c vendor/pthreads/current/pthreads.2/tests/rwlock4.c vendor/pthreads/current/pthreads.2/tests/rwlock4_t.c vendor/pthreads/current/pthreads.2/tests/rwlock5.c vendor/pthreads/current/pthreads.2/tests/rwlock5_t.c vendor/pthreads/current/pthreads.2/tests/rwlock6.c vendor/pthreads/current/pthreads.2/tests/rwlock6_t.c vendor/pthreads/current/pthreads.2/tests/rwlock6_t2.c vendor/pthreads/current/pthreads.2/tests/rwlock7.c vendor/pthreads/current/pthreads.2/tests/rwlock8.c vendor/pthreads/current/pthreads.2/tests/self1.c vendor/pthreads/current/pthreads.2/tests/self2.c vendor/pthreads/current/pthreads.2/tests/semaphore1.c vendor/pthreads/current/pthreads.2/tests/semaphore2.c vendor/pthreads/current/pthreads.2/tests/semaphore3.c vendor/pthreads/current/pthreads.2/tests/semaphore4.c vendor/pthreads/current/pthreads.2/tests/semaphore4t.c vendor/pthreads/current/pthreads.2/tests/semaphore5.c vendor/pthreads/current/pthreads.2/tests/sizes.c vendor/pthreads/current/pthreads.2/tests/sizes.gc vendor/pthreads/current/pthreads.2/tests/sizes.gce vendor/pthreads/current/pthreads.2/tests/sizes.vc vendor/pthreads/current/pthreads.2/tests/sizes.vse vendor/pthreads/current/pthreads.2/tests/spin1.c vendor/pthreads/current/pthreads.2/tests/spin2.c vendor/pthreads/current/pthreads.2/tests/spin3.c vendor/pthreads/current/pthreads.2/tests/spin4.c vendor/pthreads/current/pthreads.2/tests/stress1.c vendor/pthreads/current/pthreads.2/tests/test.h vendor/pthreads/current/pthreads.2/tests/tryentercs.c vendor/pthreads/current/pthreads.2/tests/tryentercs2.c vendor/pthreads/current/pthreads.2/tests/tsd1.c vendor/pthreads/current/pthreads.2/tests/tsd2.c vendor/pthreads/current/pthreads.2/tests/valid1.c vendor/pthreads/current/pthreads.2/tests/valid2.c vendor/pthreads/current/pthreads.2/tsd.c vendor/pthreads/current/pthreads.2/version.rc vendor/pthreads/current/pthreads.2/w32_CancelableWait.c
Added: vendor/pthreads/current/QueueUserAPCEx/COPYING.LIB =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/COPYING.LIB (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/COPYING.LIB 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + +
Added: vendor/pthreads/current/QueueUserAPCEx/Readme.txt =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/Readme.txt (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/Readme.txt 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,44 @@ +TEST PLATFORM: +Windows XP Home, Microsoft Visual C++ 6.0, Drivers Development Kit +(Windows 2000 DDK). + +PREBUILT DRIVER AND DLL SUPPLIED +Exec/AlertDrv.sys +User/quserex.dll + +DIRECTORIES: +driver: Source code of the device driver +user: Source code of QueueUserAPCEx +testapp: Demo of QueueUserAPCEx +execs: Binary version of the device driver + +INSTALLING THE DRIVER +1. Copy the driver alertdrv.sys into the WINNT\system32\drivers directory. +2. Execute "regedit alertdrv.reg" +3. Reboot the system + +INSTALLING THE DLL +Put User/QuserEx.dll somewhere appropriate where the system will find +it when your application is run. + +LOADING AND UNLOADING THE DRIVER +After rebooting, the driver has been installed on the system. +Use "net start alertdrv" to load (start) the driver, +or "net stop alertdrv" to unload (stop) the driver. + +BUILDING THE DRIVER FROM SOURCE +Click the Free Build Environment or Checked Build Environment +icon under your Developement Kits program group to set basic +environment variables needed by the build utility. + +Change to the directory containing the device source code. +Run build -ceZ. The driver alertdrv.sys will be placed in +the platform specific subdirectory driver\i386. + +BUILDING QUSEREX.DLL +Use either Makefile (MSVC nmake) or GNUmakefile (MinGW MSys make) +supplied on the User folder, or follow your nose if using an IDE. + +BUILDING THE TEST APPLICATION +1. Open the testapp.dsp file with Microsoft Visual C++. +2. Do not forget to load (start) the driver.
Added: vendor/pthreads/current/QueueUserAPCEx/driver/MAKEFILE =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/driver/MAKEFILE (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/driver/MAKEFILE 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,7 @@ +# +# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source +# file to this component. This file merely indirects to the real make file +# that is shared by all the driver components of the Windows NT DDK +# + +!INCLUDE $(NTMAKEENV)\makefile.def
Added: vendor/pthreads/current/QueueUserAPCEx/driver/Sources =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/driver/Sources (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/driver/Sources 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,5 @@ +TARGETNAME=alertdrv +TARGETPATH=. +TARGETTYPE=DRIVER + +SOURCES=alertdrv.c alertdrv.rc
Added: vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.c =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.c (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.c 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,262 @@ +/* + * QueueUserAPCEx: Extending APCs on Windows Operating System (version 2.0) + * Copyright(C) 2004 Panagiotis E. Hadjidoukas + * + * Contact Email: peh@hpclab.ceid.upatras.gr, xdoukas@ceid.upatras.gr + * + * QueueUserAPCEx is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * QueueUserAPCEx is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with QueueUserAPCEx in the file COPYING.LIB; + * if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include "ntddk.h" + +#define FILE_DEVICE_ALERTDRV 0x00008005 +#define IOCTL_ALERTDRV_SET_ALERTABLE2 CTL_CODE(FILE_DEVICE_ALERTDRV, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) + + +#define ALERTDRV_DEVICE_NAME_U L"\Device\Alertdrv" +#define ALERTDRV_DOS_DEVICE_NAME_U L"\DosDevices\ALERTDRV" + +/* Debugging macros */ +#ifdef DBG +#define AlertDrvKdPrint(_x_) \ + DbgPrint("AlertDrv.sys: ");\ + DbgPrint _x_; +#else +#define AlertDrvKdPrint(_x_) +#endif + +/* Function prototypes for APCs */ +void +KeInitializeApc( + PKAPC Apc, + PKTHREAD Thread, + CCHAR ApcStateIndex, + PKKERNEL_ROUTINE KernelRoutine, + PKRUNDOWN_ROUTINE RundownRoutine, + PKNORMAL_ROUTINE NormalRoutine, + KPROCESSOR_MODE ApcMode, + PVOID NormalContext +); + + +void +KeInsertQueueApc( + PKAPC Apc, + PVOID SystemArgument1, + PVOID SystemArgument2, + UCHAR unknown +); + + +void +KernelApcCallBack(PKAPC Apc, PKNORMAL_ROUTINE NormalRoutine, PVOID NormalContext, PVOID SystemArgument1, PVOID SystemArgument2) +{ + KEVENT event; + LARGE_INTEGER Timeout; + + AlertDrvKdPrint(("Freeing APC Object\n")); + + ExFreePool(Apc); /* free the kernel memory */ + + Timeout.QuadPart = 0; + KeDelayExecutionThread(UserMode, TRUE, &Timeout); + + /* + * Another way for a thread to set itself in alertable state + * (MSJ, Nerditorium, July 99): + * + * KeInitializeEvent(&event, SynchronizationEvent, FALSE); + * KeWaitForSingleObject(&event, Executive, UserMode, TRUE, &Timeout); + */ + + return; +} + + +void +UserApcCallBack(PVOID arg1, PVOID arg2, PVOID arg3) +{ + return; +} + +/* Function prototypes */ + +NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING registryPath); +NTSTATUS AlertDrvDispatch(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp); +VOID AlertDrvUnload(IN PDRIVER_OBJECT DriverObject); +NTSTATUS AlertDrvSendTheSignal(PETHREAD Thread); + + +NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) +{ + PDEVICE_OBJECT deviceObject = NULL; + NTSTATUS status; + WCHAR deviceNameBuffer[] = ALERTDRV_DEVICE_NAME_U; + UNICODE_STRING deviceNameUnicodeString; + WCHAR deviceLinkBuffer[] = ALERTDRV_DOS_DEVICE_NAME_U; + UNICODE_STRING deviceLinkUnicodeString; + + AlertDrvKdPrint (("DriverEntry\n")); + + RtlInitUnicodeString (&deviceNameUnicodeString, deviceNameBuffer); + + status = IoCreateDevice (DriverObject,0,&deviceNameUnicodeString, + FILE_DEVICE_ALERTDRV, 0,TRUE,&deviceObject); + + if (!NT_SUCCESS(status)) + { + AlertDrvKdPrint (("IoCreateDevice failed:%x\n", status)); + return status; + } + + DriverObject->MajorFunction[IRP_MJ_CREATE] = + DriverObject->MajorFunction[IRP_MJ_CLOSE] = + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = AlertDrvDispatch; + DriverObject->DriverUnload = AlertDrvUnload; + + RtlInitUnicodeString(&deviceLinkUnicodeString,deviceLinkBuffer); + status = IoCreateSymbolicLink (&deviceLinkUnicodeString, &deviceNameUnicodeString); + if (!NT_SUCCESS(status)) + { + AlertDrvKdPrint (("IoCreateSymbolicLink failed\n")); + IoDeleteDevice (deviceObject); + } + + return status; +} + + +NTSTATUS AlertDrvDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) +{ + PIO_STACK_LOCATION irpStack; + PVOID ioBuffer; + ULONG inputBufferLength; + ULONG outputBufferLength; + ULONG ioControlCode; + NTSTATUS ntStatus; + + PHANDLE ph = NULL; + PETHREAD uThread = NULL; + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + + irpStack = IoGetCurrentIrpStackLocation(Irp); + + ioBuffer = Irp->AssociatedIrp.SystemBuffer; + inputBufferLength = irpStack->Parameters.DeviceIoControl.InputBufferLength; + outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength; + + switch (irpStack->MajorFunction) + { + case IRP_MJ_CREATE: + AlertDrvKdPrint (("IRP_MJ_CREATE\n")); + break; + + case IRP_MJ_CLOSE: + AlertDrvKdPrint (("IRP_MJ_CLOSE\n")); + break; + + case IRP_MJ_DEVICE_CONTROL: + ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode; + + switch (ioControlCode) + { + case IOCTL_ALERTDRV_SET_ALERTABLE2: + if (inputBufferLength >= sizeof(PVOID)) + { + ph = (PHANDLE) ioBuffer; + Irp->IoStatus.Status = ObReferenceObjectByHandle(*((PHANDLE)ph),THREAD_ALL_ACCESS,NULL,UserMode,&uThread,NULL); + + if (NT_ERROR(Irp->IoStatus.Status)) + { + AlertDrvKdPrint (("ObReferenceObjectByHandle Failed (%ld)\n", Irp->IoStatus.Status)); + } + else + { + AlertDrvKdPrint (("uThread = 0x%lx\n", uThread)); + + Irp->IoStatus.Status = AlertDrvSendTheSignal(uThread); + ObDereferenceObject((PVOID) uThread); + } + } + else + { + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + AlertDrvKdPrint (("Invalid parameter passed!\n")); + } + break; + + default: + AlertDrvKdPrint (("Unknown IRP_MJ_DEVICE_CONTROL\n")); + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + break; + + } + + break; + } + + ntStatus = Irp->IoStatus.Status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return ntStatus; +} + + +VOID +AlertDrvUnload(IN PDRIVER_OBJECT DriverObject) +{ + WCHAR deviceLinkBuffer[] = ALERTDRV_DOS_DEVICE_NAME_U; + UNICODE_STRING deviceLinkUnicodeString; + + RtlInitUnicodeString (&deviceLinkUnicodeString, deviceLinkBuffer); + IoDeleteSymbolicLink (&deviceLinkUnicodeString); + IoDeleteDevice (DriverObject->DeviceObject); + + AlertDrvKdPrint (("Driver has been unloaded\n")); + + return; +} + + +NTSTATUS +AlertDrvSendTheSignal(PETHREAD uThread) +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + PKAPC kApc; + + /* Allocate an KAPC structure from NonPagedPool */ + kApc = ExAllocatePool(NonPagedPool, sizeof(KAPC)); + if (kApc == NULL) + { + AlertDrvKdPrint (("ExAllocatePool returned NULL\n")); + return !ntStatus; + } + + KeInitializeApc(kApc, + (PKTHREAD) uThread, + 0, + (PKKERNEL_ROUTINE) &KernelApcCallBack, + 0, + (PKNORMAL_ROUTINE) &UserApcCallBack, + KernelMode, + NULL); + + KeInsertQueueApc (kApc, NULL, NULL, 0); + + return ntStatus; +} \ No newline at end of file
Added: vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.ini =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.ini (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.ini 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,5 @@ +\Registry\Machine\System\CurrentControlSet\Services\AlertDrv + Type = REG_DWORD 0x00000001 + Start = REG_DWORD 0x00000003 + Group = Extended Base + ErrorControl = REG_DWORD 0x00000001
Added: vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.rc =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.rc (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.rc 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,10 @@ +#include <windows.h> + +#include <ntverp.h> + +#define VER_FILETYPE VFT_DRV +#define VER_FILESUBTYPE VFT2_DRV_SYSTEM +#define VER_FILEDESCRIPTION_STR "Alert-Thread Driver 2.0" +#define VER_INTERNALNAME_STR "alertdrv.sys" + +#include "common.ver"
Added: vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.reg =================================================================== (Binary files differ)
Property changes on: vendor/pthreads/current/QueueUserAPCEx/driver/alertdrv.reg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: vendor/pthreads/current/QueueUserAPCEx/driver/install.bat =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/driver/install.bat (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/driver/install.bat 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,2 @@ +copy ..\execs\alertdrv.sys %windir%\system32\drivers +regedit alertdrv.reg
Added: vendor/pthreads/current/QueueUserAPCEx/execs/alertdrv.sys =================================================================== (Binary files differ)
Property changes on: vendor/pthreads/current/QueueUserAPCEx/execs/alertdrv.sys ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: vendor/pthreads/current/QueueUserAPCEx/testapp/QueueUserAPCEx.c =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/testapp/QueueUserAPCEx.c (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/testapp/QueueUserAPCEx.c 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,170 @@ +/* + * QueueUserAPCEx: Extending APCs on Windows Operating System (version 2.0) + * Copyright(C) 2004 Panagiotis E. Hadjidoukas + * + * Contact Email: peh@hpclab.ceid.upatras.gr, xdoukas@ceid.upatras.gr + * + * QueueUserAPCEx is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * QueueUserAPCEx is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with QueueUserAPCEx in the file COPYING.LIB; + * if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#define _WIN32_WINNT 0x0500 +#include <windows.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <winioctl.h> + +#define FILE_DEVICE_ALERTDRV 0x00008005 +#define IOCTL_ALERTDRV_SET_ALERTABLE2 CTL_CODE(FILE_DEVICE_ALERTDRV, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) + + +static HANDLE hDevice = INVALID_HANDLE_VALUE; + + +BOOL +QueueUserAPCEx_Init(VOID) + /* + * ------------------------------------------------------ + * DOCPUBLIC + * This function initializes QueueUserAPCEx by opening a + * handle to the kernel-mode device driver. + * + * PARAMETERS + * None + * + * DESCRIPTION + * This function initializes QueueUserAPCEx by opening a + * handle to the kernel-mode device driver. + * + * RESULTS + * 1 Success + * 0 Failure: Error values can be retrieved by calling GetLastError + * ------------------------------------------------------ + */ +{ + if ((hDevice = CreateFile("\\.\Global\ALERTDRV", + GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL,NULL)) == INVALID_HANDLE_VALUE) + { + printf ("QueueUserAPCEx_Init failed: Can't get a handle to the ALERT driver\n"); + return 0; + } + + return 1; +} + + +BOOL +QueueUserAPCEx_Fini(VOID) + /* + * ------------------------------------------------------ + * DOCPUBLIC + * This function shutdowns QueueUserAPCEx by closing the + * handle to the kernel-mode device driver. + * + * PARAMETERS + * None + * + * DESCRIPTION + * This function shutdowns QueueUserAPCEx by closing the + * handle to the kernel-mode device driver. + * + * RESULTS + * 1 Success + * 0 Failure: Error values can be retrieved by calling GetLastError + * ------------------------------------------------------ + */ +{ + return CloseHandle(hDevice); +} + +DWORD QueueUserAPCEx(PAPCFUNC pfnApc, HANDLE hThread, DWORD dwData) + /* + * ------------------------------------------------------ + * DOCPUBLIC + * Adds a user-mode asynchronous procedure call (APC) object + * to the APC queue of the specified thread AND sets this + * thread in alertarte state. + * + * PARAMETERS + * Uses the same parameters as QueueUserAPC. + * + * DESCRIPTION + * Adds a user-mode asynchronous procedure call (APC) object + * to the APC queue of the specified thread AND sets this + * thread in alertarte state. + * + * RESULTS + * 1 Success + * 0 Failure + * ------------------------------------------------------ + */ +{ + DWORD cbReturned; + + /* trivial case */ + if (hThread == GetCurrentThread()) + { + if (!QueueUserAPC(pfnApc, hThread, dwData)) + { + return 0; + } + + SleepEx(0, TRUE); + return 1; + } + + if (INVALID_HANDLE_VALUE == hDevice + /* && !QueueUserAPCEx_Init() */ + ) + { + printf ("Can't get a handle to the ALERT driver\n"); + + return 0; + } + + /* probably not necessary */ + if (SuspendThread(hThread) == -1) + { + return 0; + } + + /* Send the APC */ + if (!QueueUserAPC(pfnApc, hThread, dwData)) + { + return 0; + } + + /* Ensure the execution of the APC */ + if (DeviceIoControl (hDevice, (DWORD)IOCTL_ALERTDRV_SET_ALERTABLE2, &hThread, sizeof(HANDLE), + NULL, 0, &cbReturned, 0)) + { + } + else + { + printf ("DeviceIoControl failed\n"); + return 0; + } + + /* Here, we could even cancel suspended threads */ + ResumeThread(hThread); + + return 1; +} + + + +
Added: vendor/pthreads/current/QueueUserAPCEx/testapp/QueueUserAPCEx.h =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/testapp/QueueUserAPCEx.h (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/testapp/QueueUserAPCEx.h 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,36 @@ +/* + * QueueUserAPCEx: Extending APCs on Windows Operating System (version 2.0) + * Copyright(C) 2004 Panagiotis E. Hadjidoukas + * + * Contact Email: peh@hpclab.ceid.upatras.gr, xdoukas@ceid.upatras.gr + * + * QueueUserAPCEx is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * QueueUserAPCEx is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with QueueUserAPCEx in the file COPYING.LIB; + * if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#if !defined( QUEUEUSERAPCEX_H ) +#define QUEUEUSERAPCEX_H + +#if !defined(_WIN32_WINNT) +#define _WIN32_WINNT 0x0501 +#endif + +#include <windows.h> + +BOOL QueueUserAPCEx_Init(VOID); +BOOL QueueUserAPCEx_Fini(VOID); +DWORD QueueUserAPCEx(PAPCFUNC pfnApc, HANDLE hThread, DWORD dwData); + +#endif /* QUEUEUSERAPCEX_H */ \ No newline at end of file
Added: vendor/pthreads/current/QueueUserAPCEx/testapp/testapp.c =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/testapp/testapp.c (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/testapp/testapp.c 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,102 @@ +/* + * QueueUserAPCEx: Extending APCs on Windows Operating System (version 2.0) + * Copyright(C) 2004 Panagiotis E. Hadjidoukas + * + * Contact Email: peh@hpclab.ceid.upatras.gr, xdoukas@ceid.upatras.gr + * + * QueueUserAPCEx is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * QueueUserAPCEx is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with QueueUserAPCEx in the file COPYING.LIB; + * if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +/* testapp.c : demo of QueueUserAPCEx */ +#define _WIN32_WINNT 0x0501 +#include <windows.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#include "QueueUserApcEx.h" + + +DWORD WINAPI TestSleep(LPVOID lpParam) +{ + printf("[Thread %4ld] Calling Sleep...\n", GetCurrentThreadId()); + Sleep(INFINITE); + printf("[Thread %4ld] Exiting!\n", GetCurrentThreadId()); + + return 0; +} + +DWORD WINAPI TestWait(LPVOID lpParam) +{ + HANDLE hEvent; + DWORD dwEvent; + + hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); + + printf("[Thread %4ld] Calling WaitForSingleObject...\n", GetCurrentThreadId()); + dwEvent = WaitForSingleObject(hEvent, INFINITE); + printf("[Thread %4ld] WaitForSingleObject returned %d\n", GetCurrentThreadId(), dwEvent); /* WAIT_IO_COMPLETION */ + printf("[Thread %4ld] Exiting!\n", GetCurrentThreadId()); + + return 0; +} + +DWORD WINAPI APCRoutine(DWORD APCParam) +{ + printf("[Thread %4ld] Inside APC routine with argument (%ld)\n", + GetCurrentThreadId(), APCParam); + return 0; +} + +int main(void) +{ + DWORD APCData; + HANDLE hThread; + ULONG id; + INT res; + + QueueUserAPCEx_Init(); + printf("XXX [Thread %4ld] Starting\n", GetCurrentThreadId()); + + /* Test: send an APC to myself */ + printf("[Thread %4ld] Sending an APC to myself\n", GetCurrentThreadId()); + APCData = 33; + res= QueueUserAPCEx((PAPCFUNC) APCRoutine, GetCurrentThread(), APCData); + + + hThread= CreateThread(NULL, 0, TestSleep, NULL, 0, &id); + /* Sleep for a while; then send an APC to hThread */ + Sleep(5000); + printf("[Thread %4ld] Sending an APC to the thread that called Sleep\n", GetCurrentThreadId()); + APCData = 44; + res= QueueUserAPCEx((PAPCFUNC) APCRoutine, hThread, APCData); + WaitForSingleObject(hThread, INFINITE); + + + hThread= CreateThread(NULL, 0, TestWait, NULL, 0, &id); + /* Sleep for a while; then send an APC to hThread */ + Sleep(5000); + printf("[Thread %4ld] Sending an APC to the thread that called WaitForSingleObject\n", GetCurrentThreadId()); + APCData = 55; + res= QueueUserAPCEx((PAPCFUNC) APCRoutine, hThread, APCData); + WaitForSingleObject(hThread, INFINITE); + + printf("[Thread %4ld] Exiting\n", GetCurrentThreadId()); + + QueueUserAPCEx_Fini(); + + return 0; +}
Added: vendor/pthreads/current/QueueUserAPCEx/testapp/testapp.dsp =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/testapp/testapp.dsp (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/testapp/testapp.dsp 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,99 @@ +# Microsoft Developer Studio Project File - Name="testapp" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=testapp - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "testapp.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "testapp.mak" CFG="testapp - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "testapp - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "testapp - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +F90=df.exe +RSC=rc.exe + +!IF "$(CFG)" == "testapp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE F90 /compile_only /include:"Release/" /nologo /warn:nofileopt +# ADD F90 /compile_only /include:"Release/" /nologo /warn:nofileopt +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "c:/pthread/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x1809 /d "NDEBUG" +# ADD RSC /l 0x1809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "testapp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE F90 /check:bounds /compile_only /debug:full /include:"Debug/" /nologo /warn:argument_checking /warn:nofileopt +# ADD F90 /check:bounds /compile_only /debug:full /include:"Debug/" /nologo /warn:argument_checking /warn:nofileopt +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "c:/pthread/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x1809 /d "_DEBUG" +# ADD RSC /l 0x1809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib ws2_32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "testapp - Win32 Release" +# Name "testapp - Win32 Debug" +# Begin Source File + +SOURCE=.\QueueUserApcEx.c +# End Source File +# Begin Source File + +SOURCE=.\testapp.c +# End Source File +# End Target +# End Project
Added: vendor/pthreads/current/QueueUserAPCEx/user/GNUmakefile =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/user/GNUmakefile (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/user/GNUmakefile 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,66 @@ +# +# -------------------------------------------------------------------------- +# +# QueueUserEx GNU make Makefile +# + +# If Running MsysDTK +RM = rm -f +MV = mv -f +CP = cp -f + +# If not. +#RM = erase +#MV = rename +#CP = copy + +AR = ar + +CC = gcc +#OPT = -g +OPT = -O3 + +LFLAGS = + +GC_CFLAGS = +GCE_CFLAGS = + +MAKE = make +CFLAGS = $(OPT) -I. -D_WIN32_WINNT=0x501 -Wall + +DLL_INLINED_OBJS = \ + pthread.o + +# Agregate modules for inlinability +DLL_OBJS = QueueUserAPCEx.o + +DLL = quserex.dll +LIB = libquserex.a + +$(DLL): $(DLL_OBJS) + $(CC) $(OPT) -shared -o $(DLL) $(DLL_OBJS) $(LFLAGS) + dlltool -z quserex.def $(DLL_OBJS) + dlltool -k --dllname $@ --output-lib $(LIB) --def quserex.def + +%.pre: %.c + $(CC) -E -o $@ $(CFLAGS) $^ + +%.s: %.c + $(CC) -c $(CFLAGS) -Wa,-ahl $^ > $@ + +.SUFFIXES: .dll .c .o + +.c.o:; $(CC) -c -o $@ $(CFLAGS) $< + +clean: + -$(RM) *~ + -$(RM) *.i + -$(RM) *.o + -$(RM) *.obj + -$(RM) *.exe + -$(RM) quserex.def + +realclean: clean + -$(RM) $(LIB) + -$(RM) $(DLL) +
Added: vendor/pthreads/current/QueueUserAPCEx/user/Makefile =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/user/Makefile (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/user/Makefile 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,31 @@ + +DLL = quserex.dll + +OPTIM = /O2 + +CFLAGS = /W3 /MD /nologo /Yd /Zi /I. + +DLL_OBJS = QueueUserAPCEx.obj + +$(DLL): $(DLL_OBJS) + cl /LD /Zi /nologo $(DLL_OBJS) \ + /link /nodefaultlib:libcmt /implib:$*.lib \ + msvcrt.lib /out:$@ + +realclean: clean + if exist *.dll del *.dll + if exist *.lib del *.lib + +clean: + if exist *.obj del *.obj + if exist *.ilk del *.ilk + if exist *.pdb del *.pdb + if exist *.exp del *.exp + if exist *.o del *.o + if exist *.i del *.i + +.c.obj: + cl $(OPTIM) $(CFLAGS) -c $< + +.c.i: + cl /P /O2 /Ob1 $<
Added: vendor/pthreads/current/QueueUserAPCEx/user/QueueUserAPCEx.c =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/user/QueueUserAPCEx.c (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/user/QueueUserAPCEx.c 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,163 @@ +/* + * QueueUserAPCEx: Extending APCs on Windows Operating System (version 2.0) + * Copyright(C) 2004 Panagiotis E. Hadjidoukas + * + * Contact Email: peh@hpclab.ceid.upatras.gr, xdoukas@ceid.upatras.gr + * + * QueueUserAPCEx is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * QueueUserAPCEx is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with QueueUserAPCEx in the file COPYING.LIB; + * if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#define _WIN32_WINNT 0x0500 +#include <windows.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <winioctl.h> + +#define FILE_DEVICE_ALERTDRV 0x00008005 +#define IOCTL_ALERTDRV_SET_ALERTABLE2 CTL_CODE(FILE_DEVICE_ALERTDRV, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) + + +static HANDLE hDevice = INVALID_HANDLE_VALUE; + + +__declspec (dllexport) BOOL +QueueUserAPCEx_Init(VOID) + /* + * ------------------------------------------------------ + * DOCPUBLIC + * This function initializes QueueUserAPCEx by opening a + * handle to the kernel-mode device driver. + * + * PARAMETERS + * None + * + * DESCRIPTION + * This function initializes QueueUserAPCEx by opening a + * handle to the kernel-mode device driver. + * + * RESULTS + * 1 Success + * 0 Failure: Error values can be retrieved by calling GetLastError + * ------------------------------------------------------ + */ +{ + if ((hDevice = CreateFile("\\.\Global\ALERTDRV", + GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL,NULL)) == INVALID_HANDLE_VALUE) + { + return 0; + } + + return 1; +} + + +__declspec (dllexport) BOOL +QueueUserAPCEx_Fini(VOID) + /* + * ------------------------------------------------------ + * DOCPUBLIC + * This function shutdowns QueueUserAPCEx by closing the + * handle to the kernel-mode device driver. + * + * PARAMETERS + * None + * + * DESCRIPTION + * This function shutdowns QueueUserAPCEx by closing the + * handle to the kernel-mode device driver. + * + * RESULTS + * 1 Success + * 0 Failure: Error values can be retrieved by calling GetLastError + * ------------------------------------------------------ + */ +{ + return CloseHandle(hDevice); +} + +__declspec (dllexport) DWORD +QueueUserAPCEx(PAPCFUNC pfnApc, HANDLE hThread, DWORD dwData) + /* + * ------------------------------------------------------ + * DOCPUBLIC + * Adds a user-mode asynchronous procedure call (APC) object + * to the APC queue of the specified thread AND sets this + * thread in alertarte state. + * + * PARAMETERS + * Uses the same parameters as QueueUserAPC. + * + * DESCRIPTION + * Adds a user-mode asynchronous procedure call (APC) object + * to the APC queue of the specified thread AND sets this + * thread in alertarte state. + * + * RESULTS + * 1 Success + * 0 Failure + * ------------------------------------------------------ + */ +{ + DWORD cbReturned; + + /* trivial case */ + if (hThread == GetCurrentThread()) + { + if (!QueueUserAPC(pfnApc, hThread, dwData)) + { + return 0; + } + + SleepEx(0, TRUE); + return 1; + } + + if (INVALID_HANDLE_VALUE == hDevice + /* && !QueueUserAPCEx_Init() */ + ) + { + return 0; + } + + /* probably not necessary */ + if (SuspendThread(hThread) == -1) + { + return 0; + } + + /* Send the APC */ + if (!QueueUserAPC(pfnApc, hThread, dwData)) + { + return 0; + } + + /* Ensure the execution of the APC */ + if (DeviceIoControl (hDevice, (DWORD)IOCTL_ALERTDRV_SET_ALERTABLE2, &hThread, sizeof(HANDLE), + NULL, 0, &cbReturned, 0)) + { + } + else + { + return 0; + } + + /* Here, we could even cancel suspended threads */ + ResumeThread(hThread); + + return 1; +}
Added: vendor/pthreads/current/QueueUserAPCEx/user/QueueUserAPCEx.h =================================================================== --- vendor/pthreads/current/QueueUserAPCEx/user/QueueUserAPCEx.h (rev 0) +++ vendor/pthreads/current/QueueUserAPCEx/user/QueueUserAPCEx.h 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,36 @@ +/* + * QueueUserAPCEx: Extending APCs on Windows Operating System (version 2.0) + * Copyright(C) 2004 Panagiotis E. Hadjidoukas + * + * Contact Email: peh@hpclab.ceid.upatras.gr, xdoukas@ceid.upatras.gr + * + * QueueUserAPCEx is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * QueueUserAPCEx is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with QueueUserAPCEx in the file COPYING.LIB; + * if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#if !defined( QUEUEUSERAPCEX_H ) +#define QUEUEUSERAPCEX_H + +#if !defined(_WIN32_WINNT) +#define _WIN32_WINNT 0x0501 +#endif + +#include <windows.h> + +BOOL QueueUserAPCEx_Init(VOID); +BOOL QueueUserAPCEx_Fini(VOID); +DWORD QueueUserAPCEx(PAPCFUNC pfnApc, HANDLE hThread, DWORD dwData); + +#endif /* QUEUEUSERAPCEX_H */
Added: vendor/pthreads/current/QueueUserAPCEx/user/quserex.lib =================================================================== (Binary files differ)
Property changes on: vendor/pthreads/current/QueueUserAPCEx/user/quserex.lib ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: vendor/pthreads/current/pthreads.2/ANNOUNCE =================================================================== --- vendor/pthreads/current/pthreads.2/ANNOUNCE (rev 0) +++ vendor/pthreads/current/pthreads.2/ANNOUNCE 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,476 @@ + PTHREADS-WIN32 RELEASE 2.8.0 (2006-12-22) + ----------------------------------------- + Web Site: http://sources.redhat.com/pthreads-win32/ + FTP Site: ftp://sources.redhat.com/pub/pthreads-win32 + Maintainer: Ross Johnson rpj@callisto.canberra.edu.au + + +We are pleased to announce the availability of a new release of +Pthreads-win32, an Open Source Software implementation of the +Threads component of the POSIX 1003.1 2001 Standard for Microsoft's +Win32 environment. Some functions from other sections of POSIX +1003.1 2001 are also supported including semaphores and scheduling +functions. + +Some common non-portable functions are also implemented for +additional compatibility, as are a few functions specific +to pthreads-win32 for easier integration with Win32 applications. + +Pthreads-win32 is free software, distributed under the GNU Lesser +General Public License (LGPL). + + +Acknowledgements +---------------- +This library is based originally on a Win32 pthreads +implementation contributed by John Bossom John.Bossom@cognos.com. + +The implementation of Condition Variables uses algorithms developed +by Alexander Terekhov and Louis Thomas. + +The implementation of POSIX mutexes has been improved by Thomas Pfaff +and later by Alexander Terekhov. + +The implementation of Spinlocks and Barriers was contributed +by Ross Johnson. + +The implementation of read/write locks was contributed by +Aurelio Medina and improved by Alexander Terekhov. + +Many others have contributed significant time and effort to solve crutial +problems in order to make the library workable, robust and reliable. + +Thanks to Xavier Leroy for granting permission to use and modify his +LinuxThreads manual pages. + +Thanks to The Open Group for making the Single Unix Specification +publicly available - many of the manual pages included in the package +were extracted from it. + +There is also a separate CONTRIBUTORS file. This file and others are +on the web site: + + http://sources.redhat.com/pthreads-win32 + +As much as possible, the ChangeLog file acknowledges contributions to the +code base in more detail. + + +Changes since the last release +------------------------------ +These are now documented in the NEWS file. +See the ChangeLog file also. + + +Known Bugs +---------- +These are now documented in the BUGS file. + + +Level of standards conformance +------------------------------ + +The following POSIX 1003.1 2001 options are defined and set to 200112L: + + _POSIX_THREADS + _POSIX_THREAD_SAFE_FUNCTIONS + _POSIX_THREAD_ATTR_STACKSIZE + _POSIX_THREAD_PRIORITY_SCHEDULING + _POSIX_SEMAPHORES + _POSIX_READER_WRITER_LOCKS + _POSIX_SPIN_LOCKS + _POSIX_BARRIERS + + +The following POSIX 1003.1 2001 options are defined and set to -1: + + _POSIX_THREAD_ATTR_STACKADDR + _POSIX_THREAD_PRIO_INHERIT + _POSIX_THREAD_PRIO_PROTECT + _POSIX_THREAD_PROCESS_SHARED + + +The following POSIX 1003.1 2001 limits are defined and set: + + _POSIX_THREAD_THREADS_MAX + _POSIX_SEM_VALUE_MAX + _POSIX_SEM_NSEMS_MAX + _POSIX_THREAD_KEYS_MAX + _POSIX_THREAD_DESTRUCTOR_ITERATIONS + PTHREAD_STACK_MIN + PTHREAD_THREADS_MAX + SEM_VALUE_MAX + SEM_NSEMS_MAX + PTHREAD_KEYS_MAX + PTHREAD_DESTRUCTOR_ITERATIONS + + +The following functions are implemented: + + --------------------------- + PThreads + --------------------------- + pthread_attr_init + pthread_attr_destroy + pthread_attr_getdetachstate + pthread_attr_getstackaddr + pthread_attr_getstacksize + pthread_attr_setdetachstate + pthread_attr_setstackaddr + pthread_attr_setstacksize + + pthread_create + pthread_detach + pthread_equal + pthread_exit + pthread_join + pthread_once + pthread_self + + pthread_cancel + pthread_cleanup_pop + pthread_cleanup_push + pthread_setcancelstate + pthread_setcanceltype + pthread_testcancel + + --------------------------- + Thread Specific Data + --------------------------- + pthread_key_create + pthread_key_delete + pthread_setspecific + pthread_getspecific + + --------------------------- + Mutexes + --------------------------- + pthread_mutexattr_init + pthread_mutexattr_destroy + pthread_mutexattr_getpshared + pthread_mutexattr_setpshared + pthread_mutexattr_gettype + pthread_mutexattr_settype (types: PTHREAD_MUTEX_DEFAULT + PTHREAD_MUTEX_NORMAL + PTHREAD_MUTEX_ERRORCHECK + PTHREAD_MUTEX_RECURSIVE ) + pthread_mutex_init + pthread_mutex_destroy + pthread_mutex_lock + pthread_mutex_trylock + pthread_mutex_timedlock + pthread_mutex_unlock + + --------------------------- + Condition Variables + --------------------------- + pthread_condattr_init + pthread_condattr_destroy + pthread_condattr_getpshared + pthread_condattr_setpshared + + pthread_cond_init + pthread_cond_destroy + pthread_cond_wait + pthread_cond_timedwait + pthread_cond_signal + pthread_cond_broadcast + + --------------------------- + Read/Write Locks + --------------------------- + pthread_rwlock_init + pthread_rwlock_destroy + pthread_rwlock_tryrdlock + pthread_rwlock_trywrlock + pthread_rwlock_rdlock + pthread_rwlock_timedrdlock + pthread_rwlock_rwlock + pthread_rwlock_timedwrlock + pthread_rwlock_unlock + pthread_rwlockattr_init + pthread_rwlockattr_destroy + pthread_rwlockattr_getpshared + pthread_rwlockattr_setpshared + + --------------------------- + Spin Locks + --------------------------- + pthread_spin_init + pthread_spin_destroy + pthread_spin_lock + pthread_spin_unlock + pthread_spin_trylock + + --------------------------- + Barriers + --------------------------- + pthread_barrier_init + pthread_barrier_destroy + pthread_barrier_wait + pthread_barrierattr_init + pthread_barrierattr_destroy + pthread_barrierattr_getpshared + pthread_barrierattr_setpshared + + --------------------------- + Semaphores + --------------------------- + sem_init + sem_destroy + sem_post + sem_wait + sem_trywait + sem_timedwait + sem_getvalue (# free if +ve, # of waiters if -ve) + sem_open (returns an error ENOSYS) + sem_close (returns an error ENOSYS) + sem_unlink (returns an error ENOSYS) + + --------------------------- + RealTime Scheduling + --------------------------- + pthread_attr_getschedparam + pthread_attr_setschedparam + pthread_attr_getinheritsched + pthread_attr_setinheritsched + pthread_attr_getschedpolicy (only supports SCHED_OTHER) + pthread_attr_setschedpolicy (only supports SCHED_OTHER) + pthread_getschedparam + pthread_setschedparam + pthread_getconcurrency + pthread_setconcurrency + pthread_attr_getscope + pthread_attr_setscope (only supports PTHREAD_SCOPE_SYSTEM) + sched_get_priority_max + sched_get_priority_min + sched_rr_get_interval (returns an error ENOTSUP) + sched_setscheduler (only supports SCHED_OTHER) + sched_getscheduler (only supports SCHED_OTHER) + sched_yield + + --------------------------- + Signals + --------------------------- + pthread_sigmask + pthread_kill (only supports zero sig value, + for thread validity checking) + + --------------------------- + Non-portable routines (see the README.NONPORTABLE file for usage) + --------------------------- + pthread_getw32threadhandle_np + pthread_timechange_handler_np + pthread_delay_np + pthread_mutexattr_getkind_np + pthread_mutexattr_setkind_np (types: PTHREAD_MUTEX_FAST_NP, + PTHREAD_MUTEX_ERRORCHECK_NP, + PTHREAD_MUTEX_RECURSIVE_NP, + PTHREAD_MUTEX_ADAPTIVE_NP, + PTHREAD_MUTEX_TIMED_NP) + pthread_num_processors_np + pthread_win32_process_attach_np (Required when statically linking + the library) + pthread_win32_process_detach_np (Required when statically linking + the library) + pthread_win32_thread_attach_np (Required when statically linking + the library) + pthread_win32_thread_detach_np (Required when statically linking + the library) + + --------------------------- + Static Initializers + --------------------------- + PTHREAD_ONCE_INIT + PTHREAD_MUTEX_INITIALIZER + PTHREAD_RECURSIVE_MUTEX_INITIALIZER + PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + PTHREAD_ERRORCHECK_MUTEX_INITIALIZER + PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP + PTHREAD_COND_INITIALIZER + PTHREAD_RWLOCK_INITIALIZER + PTHREAD_SPINLOCK_INITIALIZER + + --------------------------- + Thread-Safe C Runtime Library (macros) + --------------------------- + strtok_r + asctime_r + ctime_r + gmtime_r + localtime_r + rand_r + + +The following functions are not implemented: + + --------------------------- + RealTime Scheduling + --------------------------- + pthread_mutex_getprioceiling + pthread_mutex_setprioceiling + pthread_mutex_attr_getprioceiling + pthread_mutex_attr_getprotocol + pthread_mutex_attr_setprioceiling + pthread_mutex_attr_setprotocol + + --------------------------- + Fork Handlers + --------------------------- + pthread_atfork + + --------------------------- + Stdio + --------------------------- + flockfile + ftrylockfile + funlockfile + getc_unlocked + getchar_unlocked + putc_unlocked + putchar_unlocked + + --------------------------- + Thread-Safe C Runtime Library + --------------------------- + readdir_r + getgrgid_r + getgrnam_r + getpwuid_r + getpwnam_r + + --------------------------- + Signals + --------------------------- + sigtimedwait + sigwait + sigwaitinfo + + --------------------------- + General + --------------------------- + sysconf + +The library includes two non-API functions for creating cancellation +points in applications and libraries: + + pthreadCancelableWait + pthreadCancelableTimedWait + + +Availability +------------ + +The prebuilt DLL, export libs (for both MSVC and Mingw32), and the header +files (pthread.h, semaphore.h, sched.h) are available along with the +complete source code. + +The source code can be found at: + + ftp://sources.redhat.com/pub/pthreads-win32 + +and as individual source code files at + + ftp://sources.redhat.com/pub/pthreads-win32/source + +The pre-built DLL, export libraries and include files can be found at: + + ftp://sources.redhat.com/pub/pthreads-win32/dll-latest + + + +Mailing List +------------ + +There is a mailing list for discussing pthreads on Win32. To join, +send email to: + + pthreads-win32-subscribe@sourceware.cygnus.com + + +Application Development Environments +------------------------------------ + +See the README file for more information. + +MSVC: +MSVC using SEH works. Distribute pthreadVSE.dll with your application. +MSVC using C++ EH works. Distribute pthreadVCE.dll with your application. +MSVC using C setjmp/longjmp works. Distribute pthreadVC.dll with your application. + + +Mingw32: +See the FAQ, Questions 6 and 10. + +Mingw using C++ EH works. Distribute pthreadGCE.dll with your application. +Mingw using C setjmp/longjmp works. Distribute pthreadGC.dll with your application. + + +Cygwin: (http://sourceware.cygnus.com/cygwin/) +Developers using Cygwin will not need pthreads-win32 since it has POSIX threads +support. Refer to its documentation for details and extent. + + +UWIN: +UWIN is a complete Unix-like environment for Windows from AT&T. Pthreads-win32 +doesn't currently support UWIN (and vice versa), but that may change in the +future. + +Generally: +For convenience, the following pre-built files are available on the FTP site +(see Availability above): + + pthread.h - for POSIX 1c threads + semaphore.h - for POSIX 1b semaphores + sched.h - for POSIX 1b scheduling + pthreadVCE.dll - built with MSVC++ compiler using C++ EH + pthreadVCE.lib + pthreadVC.dll - built with MSVC compiler using C setjmp/longjmp + pthreadVC.lib + pthreadVSE.dll - built with MSVC compiler using SEH + pthreadVSE.lib + pthreadGCE.dll - built with Mingw32 G++ 2.95.2-1 + pthreadGC.dll - built with Mingw32 GCC 2.95.2-1 using setjmp/longjmp + libpthreadGCE.a - derived from pthreadGCE.dll + libpthreadGC.a - derived from pthreadGC.dll + gcc.dll - needed if distributing applications that use + pthreadGCE.dll (but see the FAQ Q 10 for the latest + related information) + +These are the only files you need in order to build POSIX threads +applications for Win32 using either MSVC or Mingw32. + +See the FAQ file in the source tree for additional information. + + +Documentation +------------- + +For the authoritative reference, see the online POSIX +standard reference at: + + http://www.OpenGroup.org + +For POSIX Thread API programming, several reference books are +available: + + Programming with POSIX Threads + David R. Butenhof + Addison-Wesley (pub) + + Pthreads Programming + By Bradford Nichols, Dick Buttlar & Jacqueline Proulx Farrell + O'Reilly (pub) + +On the web: see the links at the bottom of the pthreads-win32 site: + + http://sources.redhat.com/pthreads-win32/ + + Currently, there is no documentation included in the package apart + from the copious comments in the source code. + + + +Enjoy! + +Ross Johnson
Added: vendor/pthreads/current/pthreads.2/BUGS =================================================================== --- vendor/pthreads/current/pthreads.2/BUGS (rev 0) +++ vendor/pthreads/current/pthreads.2/BUGS 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,133 @@ +---------- +Known bugs +---------- + +1. Not strictly a bug, more of a gotcha. + + Under MS VC++ (only tested with version 6.0), a term_func + set via the standard C++ set_terminate() function causes the + application to abort. + + Notes from the MSVC++ manual: + 1) A term_func() should call exit(), otherwise + abort() will be called on return to the caller. + A call to abort() raises SIGABRT and the default signal handler + for all signals terminates the calling program with + exit code 3. + 2) A term_func() must not throw an exception. Therefore + term_func() should not call pthread_exit(), which + works by throwing an exception (pthreadVCE or pthreadVSE) + or by calling longjmp (pthreadVC). + + Workaround: avoid using pthread_exit() in C++ applications. Exit + threads by dropping through the end of the thread routine. + +2. Cancellation problems in optimised code + - Milan Gardian + + This is suspected to be a compiler bug in VC6.0, and also seen in + VC7.0 and VS .NET 2003. The GNU C++ compiler does not have a problem + with this, and it has been reported that the Intel C++ 8.1 compiler + and Visual C++ 2005 Express Edition Beta2 pass tests\semaphore4.c + (which exposes the bug). + + Workaround [rpj - 2 Feb 2002] + ----------------------------- + [Please note: this workaround did not solve a similar problem in + snapshot-2004-11-03 or later, even though similar symptoms were seen. + tests\semaphore4.c fails in that snapshot for the VCE version of the + DLL.] + + The problem disappears when /Ob0 is used, i.e. /O2 /Ob0 works OK, + but if you want to use inlining optimisation you can be much more + specific about where it's switched off and on by using a pragma. + + So the inlining optimisation is interfering with the way that cleanup + handlers are run. It appears to relate to auto-inlining of class methods + since this is the only auto inlining that is performed at /O1 optimisation + (functions with the "inline" qualifier are also inlined, but the problem + doesn't appear to involve any such functions in the library or testsuite). + + In order to confirm the inlining culprit, the following use of pragmas + eliminate the problem but I don't know how to make it transparent, putting + it in, say, pthread.h where pthread_cleanup_push defined as a macro. + + #pragma inline_depth(0) + pthread_cleanup_push(handlerFunc, (void *) &arg); + + /* ... */ + + pthread_cleanup_pop(0); + #pragma inline_depth() + + Note the empty () pragma value after the pop macro. This resets depth to the + default. Or you can specify a non-zero depth here. + + The pragma is also needed (and now used) within the library itself wherever + cleanup handlers are used (condvar.c and rwlock.c). + + Use of these pragmas allows compiler optimisations /O1 and /O2 to be + used for either or both the library and applications. + + Experimenting further, I found that wrapping the actual cleanup handler + function with #pragma auto_inline(off|on) does NOT work. + + MSVC6.0 doesn't appear to support the C99 standard's _Pragma directive, + however, later versions may. This form is embeddable inside #define + macros, which would be ideal because it would mean that it could be added + to the push/pop macro definitions in pthread.h and hidden from the + application programmer. + + [/rpj] + + Original problem description + ---------------------------- + + The cancellation (actually, cleanup-after-cancel) tests fail when using VC + (professional) optimisation switches (/O1 or /O2) in pthreads library. I + have not investigated which concrete optimisation technique causes this + problem (/Og, /Oi, /Ot, /Oy, /Ob1, /Gs, /Gf, /Gy, etc.), but here is a + summary of builds and corresponding failures: + + * pthreads VSE (optimised tests): OK + * pthreads VCE (optimised tests): Failed "cleanup1" test (runtime) + + * pthreads VSE (DLL in CRT, optimised tests): OK + * pthreads VCE (DLL in CRT, optimised tests): Failed "cleanup1" test + (runtime) + + Please note that while in VSE version of the pthreads library the + optimisation does not really have any impact on the tests (they pass OK), in + VCE version addition of optimisation (/O2 in this case) causes the tests to + fail uniformly - either in "cleanup0" or "cleanup1" test cases. + + Please note that all the tests above use default pthreads DLL (no + optimisations, linked with either static or DLL CRT, based on test type). + Therefore the problem lies not within the pthreads DLL but within the + compiled client code (the application using pthreads -> involvement of + "pthread.h"). + + I think the message of this section is that usage of VCE version of pthreads + in applications relying on cancellation/cleanup AND using optimisations for + creation of production code is highly unreliable for the current version of + the pthreads library. + +3. The Borland Builder 5.5 version of the library produces memory read exceptions +in some tests. + +4. pthread_barrier_wait() can deadlock if the number of potential calling +threads for a particular barrier is greater than the barrier count parameter +given to pthread_barrier_init() for that barrier. + +This is due to the very lightweight implementation of pthread-win32 barriers. +To cope with more than "count" possible waiters, barriers must effectively +implement all the same safeguards as condition variables, making them much +"heavier" than at present. + +The workaround is to ensure that no more than "count" threads attempt to wait +at the barrier. + +5. Canceling a thread blocked on pthread_once appears not to work in the MSVC++ +version of the library "pthreadVCE.dll". The test case "once3.c" hangs. I have no +clues on this at present. All other versions pass this test ok - pthreadsVC.dll, +pthreadsVSE.dll, pthreadsGC.dll and pthreadsGCE.dll.
Added: vendor/pthreads/current/pthreads.2/Bmakefile =================================================================== --- vendor/pthreads/current/pthreads.2/Bmakefile (rev 0) +++ vendor/pthreads/current/pthreads.2/Bmakefile 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,266 @@ +# This makefile is compatible with BCB make. Use "make -fBMakefile" to compile. +# +# The variables $DLLDEST and $LIBDEST hold the destination directories for the +# dll and the lib, respectively. Probably all that needs to change is $DEVROOT. +# +# Currently only the recommended pthreadBC.dll is built by this makefile. +# + + +DLL_VER = 2 + +DEVROOT = . + +DLLDEST = $(DEVROOT)\DLL +LIBDEST = $(DEVROOT)\DLL + +DLLS = pthreadBC$(DLL_VER).dll + +OPTIM = /O2 + +RC = brcc32 +RCFLAGS = -i. + +CFLAGS = /q /I. /D_WIN32_WINNT=0x400 /DHAVE_CONFIG_H=1 /4 /tWD /tWM \ + /w-aus /w-asc /w-par + +#C cleanup code +BCFLAGS = $(PTW32_FLAGS) $(CFLAGS) + +# Agregate modules for inlinability +DLL_OBJS = \ + attr.obj \ + barrier.obj \ + cancel.obj \ + cleanup.obj \ + condvar.obj \ + create.obj \ + dll.obj \ + errno.obj \ + exit.obj \ + fork.obj \ + global.obj \ + misc.obj \ + mutex.obj \ + nonportable.obj \ + private.obj \ + rwlock.obj \ + sched.obj \ + semaphore.obj \ + signal.obj \ + spin.obj \ + sync.obj \ + tsd.obj + +INCL = config.h implement.h semaphore.h pthread.h need_errno.h + +ATTR_SRCS = \ + pthread_attr_init.c \ + pthread_attr_destroy.c \ + pthread_attr_getdetachstate.c \ + pthread_attr_setdetachstate.c \ + pthread_attr_getstackaddr.c \ + pthread_attr_setstackaddr.c \ + pthread_attr_getstacksize.c \ + pthread_attr_setstacksize.c \ + pthread_attr_getscope.c \ + pthread_attr_setscope.c + +BARRIER_SRCS = \ + pthread_barrier_init.c \ + pthread_barrier_destroy.c \ + pthread_barrier_wait.c \ + pthread_barrierattr_init.c \ + pthread_barrierattr_destroy.c \ + pthread_barrierattr_setpshared.c \ + pthread_barrierattr_getpshared.c + +CANCEL_SRCS = \ + pthread_setcancelstate.c \ + pthread_setcanceltype.c \ + pthread_testcancel.c \ + pthread_cancel.c + +CONDVAR_SRCS = \ + ptw32_cond_check_need_init.c \ + pthread_condattr_destroy.c \ + pthread_condattr_getpshared.c \ + pthread_condattr_init.c \ + pthread_condattr_setpshared.c \ + pthread_cond_destroy.c \ + pthread_cond_init.c \ + pthread_cond_signal.c \ + pthread_cond_wait.c + +EXIT_SRCS = \ + pthread_exit.c + +MISC_SRCS = \ + pthread_equal.c \ + pthread_getconcurrency.c \ + pthread_once.c \ + pthread_self.c \ + pthread_setconcurrency.c \ + ptw32_calloc.c \ + ptw32_MCS_lock.c \ + ptw32_new.c \ + w32_CancelableWait.c + +MUTEX_SRCS = \ + ptw32_mutex_check_need_init.c \ + pthread_mutex_init.c \ + pthread_mutex_destroy.c \ + pthread_mutexattr_init.c \ + pthread_mutexattr_destroy.c \ + pthread_mutexattr_getpshared.c \ + pthread_mutexattr_setpshared.c \ + pthread_mutexattr_settype.c \ + pthread_mutexattr_gettype.c \ + pthread_mutex_lock.c \ + pthread_mutex_timedlock.c \ + pthread_mutex_unlock.c \ + pthread_mutex_trylock.c + +NONPORTABLE_SRCS = \ + pthread_mutexattr_setkind_np.c \ + pthread_mutexattr_getkind_np.c \ + pthread_getw32threadhandle_np.c \ + pthread_delay_np.c \ + pthread_num_processors_np.c \ + pthread_win32_attach_detach_np.c \ + pthread_timechange_handler_np.c + +PRIVATE_SRCS = \ + ptw32_is_attr.c \ + ptw32_processInitialize.c \ + ptw32_processTerminate.c \ + ptw32_threadStart.c \ + ptw32_threadDestroy.c \ + ptw32_tkAssocCreate.c \ + ptw32_tkAssocDestroy.c \ + ptw32_callUserDestroyRoutines.c \ + ptw32_timespec.c \ + ptw32_relmillisecs.c \ + ptw32_throw.c \ + ptw32_InterlockedCompareExchange.c \ + ptw32_getprocessors.c + +RWLOCK_SRCS = \ + ptw32_rwlock_check_need_init.c \ + ptw32_rwlock_cancelwrwait.c \ + pthread_rwlock_init.c \ + pthread_rwlock_destroy.c \ + pthread_rwlockattr_init.c \ + pthread_rwlockattr_destroy.c \ + pthread_rwlockattr_getpshared.c \ + pthread_rwlockattr_setpshared.c \ + pthread_rwlock_rdlock.c \ + pthread_rwlock_timedrdlock.c \ + pthread_rwlock_wrlock.c \ + pthread_rwlock_timedwrlock.c \ + pthread_rwlock_unlock.c \ + pthread_rwlock_tryrdlock.c \ + pthread_rwlock_trywrlock.c + +SCHED_SRCS = \ + pthread_attr_setschedpolicy.c \ + pthread_attr_getschedpolicy.c \ + pthread_attr_setschedparam.c \ + pthread_attr_getschedparam.c \ + pthread_attr_setinheritsched.c \ + pthread_attr_getinheritsched.c \ + pthread_setschedparam.c \ + pthread_getschedparam.c \ + sched_get_priority_max.c \ + sched_get_priority_min.c \ + sched_setscheduler.c \ + sched_getscheduler.c \ + sched_yield.c + +SEMAPHORE_SRCS = \ + sem_init.c \ + sem_destroy.c \ + sem_trywait.c \ + sem_timedwait.c \ + sem_wait.c \ + sem_post.c \ + sem_post_multiple.c \ + sem_getvalue.c \ + sem_open.c \ + sem_close.c \ + sem_unlink.c + +SPIN_SRCS = \ + ptw32_spinlock_check_need_init.c \ + pthread_spin_init.c \ + pthread_spin_destroy.c \ + pthread_spin_lock.c \ + pthread_spin_unlock.c \ + pthread_spin_trylock.c + +SYNC_SRCS = \ + pthread_detach.c \ + pthread_join.c + +TSD_SRCS = \ + pthread_key_create.c \ + pthread_key_delete.c \ + pthread_setspecific.c \ + pthread_getspecific.c + + +all: clean $(DLLS) + +realclean: clean + if exist pthread*.dll del pthread*.dll + if exist pthread*.lib del pthread*.lib + if exist *.stamp del *.stamp + +clean: + if exist *.obj del *.obj + if exist *.ilk del *.ilk + if exist *.ilc del *.ilc + if exist *.ild del *.ild + if exist *.ilf del *.ilf + if exist *.ils del *.ils + if exist *.tds del *.tds + if exist *.pdb del *.pdb + if exist *.exp del *.exp + if exist *.map del *.map + if exist *.o del *.o + if exist *.i del *.i + if exist *.res del *.res + + +install: $(DLLS) + copy pthread*.dll $(DLLDEST) + copy pthread*.lib $(LIBDEST) + +$(DLLS): $(DLL_OBJS) version.res + ilink32 /Tpd /Gi c0d32x.obj $(DLL_OBJS), \ + $@, ,\ + cw32mti.lib import32.lib, ,\ + version.res + +.c.obj: + $(CC) $(OPTIM) $(BCFLAGS) -c $< + +.rc.res: + $(RC) $(RCFLAGS) $< + +attr.obj: attr.c $(ATTR_SRCS) $(INCL) +barrier.obj: barrier.c $(BARRIER_SRCS) $(INCL) +cancel.obj: cancel.c $(CANCEL_SRCS) $(INCL) +condvar.obj: condvar.c $(CONDVAR_SRCS) $(INCL) +exit.obj: exit.c $(EXIT_SRCS) $(INCL) +misc.obj: misc.c $(MISC_SRCS) $(INCL) +mutex.obj: mutex.c $(MUTEX_SRCS) $(INCL) +nonportable.obj: nonportable.c $(NONPORTABLE_SRCS) $(INCL) +private.obj: private.c $(PRIVATE_SRCS) $(INCL) +rwlock.obj: rwlock.c $(RWLOCK_SRCS) $(INCL) +sched.obj: sched.c $(SCHED_SRCS) $(INCL) +semaphore.obj: semaphore.c $(SEMAPHORE_SRCS) $(INCL) +spin.obj: spin.c $(SPIN_SRCS) $(INCL) +sync.obj: sync.c $(SYNC_SRCS) $(INCL) +tsd.obj: tsd.c $(TSD_SRCS) $(INCL) +version.res: version.rc $(INCL)
Added: vendor/pthreads/current/pthreads.2/CONTRIBUTORS =================================================================== --- vendor/pthreads/current/pthreads.2/CONTRIBUTORS (rev 0) +++ vendor/pthreads/current/pthreads.2/CONTRIBUTORS 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,129 @@ +Contributors (in approximate order of appearance) + +[See also the ChangeLog file where individuals are +attributed in log entries. Likewise in the FAQ file.] + +Ben Elliston bje at cygnus dot com + Initiated the project; + setup the project infrastructure (CVS, web page, etc.); + early prototype routines. +Ross Johnson rpj at callisto dot canberra dot edu dot au + early prototype routines; + ongoing project coordination/maintenance; + implementation of spin locks and barriers; + various enhancements; + bug fixes; + documentation; + testsuite. +Robert Colquhoun rjc at trump dot net dot au + Early bug fixes. +John E. Bossom John dot Bossom at cognos dot com + Contributed substantial original working implementation; + bug fixes; + ongoing guidance and standards interpretation. +Anders Norlander anorland at hem2 dot passagen dot se + Early enhancements and runtime checking for supported + Win32 routines. +Tor Lillqvist tml at iki dot fi + General enhancements; + early bug fixes to condition variables. +Scott Lightner scott at curriculum dot com + Bug fix. +Kevin Ruland Kevin dot Ruland at anheuser-busch dot com + Various bug fixes. +Mike Russo miker at eai dot com + Bug fix. +Mark E. Armstrong avail at pacbell dot net + Bug fixes. +Lorin Hochstein lmh at xiphos dot ca + general bug fixes; bug fixes to condition variables. +Peter Slacik Peter dot Slacik at tatramed dot sk + Bug fixes. +Mumit Khan khan at xraylith dot wisc dot edu + Fixes to work with Mingw32. +Milan Gardian mg at tatramed dot sk + Bug fixes and reports/analyses of obscure problems. +Aurelio Medina aureliom at crt dot com + First implementation of read-write locks. +Graham Dumpleton Graham dot Dumpleton at ra dot pad dot otc dot telstra dot com dot au + Bug fix in condition variables. +Tristan Savatier tristan at mpegtv dot com + WinCE port. +Erik Hensema erik at hensema dot xs4all dot nl + Bug fixes. +Rich Peters rpeters at micro-magic dot com +Todd Owen towen at lucidcalm dot dropbear dot id dot au + Bug fixes to dll loading. +Jason Nye jnye at nbnet dot nb dot ca + Implementation of async cancelation. +Fred Forester fforest at eticomm dot net +Kevin D. Clark kclark at cabletron dot com +David Baggett dmb at itasoftware dot com + Bug fixes. +Paul Redondo paul at matchvision dot com +Scott McCaskill scott at 3dfx dot com + Bug fixes. +Jef Gearhart jgearhart at tpssys dot com + Bug fix. +Arthur Kantor akantor at bexusa dot com + Mutex enhancements. +Steven Reddie smr at essemer dot com dot au + Bug fix. +Alexander Terekhov TEREKHOV at de dot ibm dot com + Re-implemented and improved read-write locks; + (with Louis Thomas) re-implemented and improved + condition variables; + enhancements to semaphores; + enhancements to mutexes; + new mutex implementation in 'futex' style; + suggested a robust implementation of pthread_once + similar to that implemented by V.Kliathcko; + system clock change handling re CV timeouts; + bug fixes. +Thomas Pfaff tpfaff at gmx dot net + Changes to make C version usable with C++ applications; + re-implemented mutex routines to avoid Win32 mutexes + and TryEnterCriticalSection; + procedure to fix Mingw32 thread-safety issues. +Franco Bez franco dot bez at gmx dot de + procedure to fix Mingw32 thread-safety issues. +Louis Thomas lthomas at arbitrade dot com + (with Alexander Terekhov) re-implemented and improved + condition variables. +David Korn dgk at research dot att dot com + Ported to UWIN. +Phil Frisbie, Jr. phil at hawksoft dot com + Bug fix. +Ralf Brese Ralf dot Brese at pdb4 dot siemens dot de + Bug fix. +prionx at juno dot com prionx at juno dot com + Bug fixes. +Max Woodbury mtew at cds dot duke dot edu + POSIX versioning conditionals; + reduced namespace pollution; + idea to separate routines to reduce statically + linked image sizes. +Rob Fanner rfanner at stonethree dot com + Bug fix. +Michael Johnson michaelj at maine dot rr dot com + Bug fix. +Nicolas Barry boozai at yahoo dot com + Bug fixes. +Piet van Bruggen pietvb at newbridges dot nl + Bug fix. +Makoto Kato raven at oldskool dot jp + AMD64 port. +Panagiotis E. Hadjidoukas peh at hpclab dot ceid dot upatras dot gr + Contributed the QueueUserAPCEx package which + makes preemptive async cancelation possible. +Will Bryant will dot bryant at ecosm dot com + Borland compiler patch and makefile. +Anuj Goyal anuj dot goyal at gmail dot com + Port to Digital Mars compiler. +Gottlob Frege gottlobfrege at gmail dot com + re-implemented pthread_once (version 2) + (pthread_once cancellation added by rpj). +Vladimir Kliatchko vladimir at kliatchko dot com + reimplemented pthread_once with the same form + as described by A.Terekhov (later version 2); + implementation of MCS (Mellor-Crummey/Scott) locks.
Added: vendor/pthreads/current/pthreads.2/COPYING =================================================================== --- vendor/pthreads/current/pthreads.2/COPYING (rev 0) +++ vendor/pthreads/current/pthreads.2/COPYING 2008-02-22 17:25:55 UTC (rev 9491) @@ -0,0 +1,150 @@ + pthreads-win32 - a POSIX threads library for Microsoft Windows + + +This file is Copyrighted +------------------------ + + This file is covered under the following Copyright: + + Copyright (C) 2001,2006 Ross P. Johnson + All rights reserved. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Pthreads-win32 is covered by the GNU Lesser General Public License +------------------------------------------------------------------ + + Pthreads-win32 is open software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation version 2.1 of the + License. + + Pthreads-win32 is several binary link libraries, several modules, + associated interface definition files and scripts used to control + its compilation and installation. + + Pthreads-win32 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + A copy of the GNU Lesser General Public License is distributed with + pthreads-win32 under the filename: + + COPYING.LIB + + You should have received a copy of the version 2.1 GNU Lesser General + Public License with pthreads-win32; if not, write to: + + Free Software Foundation, Inc. + 59 Temple Place + Suite 330 + Boston, MA 02111-1307 + USA + + The contact addresses for pthreads-win32 is as follows: + + Web: http://sources.redhat.com/pthreads-win32 + Email: Ross Johnson + Please use: Firstname.Lastname@homemail.com.au + + + +Pthreads-win32 copyrights and exception files +--------------------------------------------- + + With the exception of the files listed below, Pthreads-win32 + is covered under the following GNU Lesser General Public License + Copyrights: + + Pthreads-win32 - POSIX Threads Library for Win32 + Copyright(C) 1998 John E. Bossom + Copyright(C) 1999,2006 Pthreads-win32 contributors + + The current list of contributors is contained + in the file CONTRIBUTORS included with the source + code distribution. The current list of CONTRIBUTORS + can also be seen at the following WWW location: + http://sources.redhat.com/pthreads-win32/contributors.html + + Contact Email: Ross Johnson + Please use: Firstname.Lastname@homemail.com.au + + These files are not covered under one of the Copyrights listed above: + + COPYING + COPYING.LIB + tests/rwlock7.c + + This file, COPYING, is distributed under the Copyright found at the + top of this file. It is important to note that you may distribute + verbatim copies of this file but you may not modify this file. + + The file COPYING.LIB, which contains a copy of the version 2.1 + GNU Lesser General Public License, is itself copyrighted by the + Free Software Foundation, Inc. Please note that the Free Software + Foundation, Inc. does NOT have a copyright over Pthreads-win32, + only the COPYING.LIB that is supplied with pthreads-win32. + + The file tests/rwlock7.c is derived from code written by + Dave Butenhof for his book 'Programming With POSIX(R) Threads'. + The original code was obtained by free download from his website + http://home.earthlink.net/~anneart/family/Threads/source.html + and did not contain a copyright or author notice. It is assumed to + be freely distributable. + + In all cases one may use and distribute these exception files freely. + And because one may freely distribute the LGPL covered files, the + entire pthreads-win32 source may be freely used and distributed. + + + +General Copyleft and License info +--------------------------------- + + For general information on Copylefts, see: + + http://www.gnu.org/copyleft/ + + For information on GNU Lesser General Public Licenses, see: + + http://www.gnu.org/copyleft/lesser.html + http://www.gnu.org/copyleft/lesser.txt + + +Why pthreads-win32 did not use the GNU General Public License +------------------------------------------------------------- + + The goal of the pthreads-win32 project has been to + provide a quality and complete implementation of the POSIX + threads API for Microsoft Windows within the limits imposed + by virtue of it being a stand-alone library and not
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.