| Age | Commit message (Collapse) | Author | 
|---|
|  |  | 
|  | * create.c (pthread_create): Add priority inheritance
        attributes.
        * mutex.c (pthread_mutex_lock): Remove some overhead for
        PTHREAD_MUTEX_NORMAL mutex types. Specifically, avoid
        calling pthread_self() and pthread_equal() to check/set
        the mutex owner. Introduce a new pseudo owner for this
        type. Test results suggest increases in speed of up to
        90% for non-blocking locks.
        This is the default type of mutex used internally by other
        synchronising objects, ie. condition variables and
        read-write locks. The test rwlock7.c shows about a
        30-35% speed increase over snapshot 2001-06-06. The
        price of this is that the application developer
        must ensure correct behaviour, or explicitly set the
        mutex to a safer type such as PTHREAD_MUTEX_ERRORCHECK.
        For example, PTHREAD_MUTEX_NORMAL (or PTHREAD_MUTEX_DEFAULT)
        type mutexes will not return an error if a thread which is not
        the owner calls pthread_mutex_unlock. The call will succeed
        in unlocking the mutex if it is currently locked, but a
        subsequent unlock by the true owner will then fail with EPERM.
        This is however consistent with some other implementations.
        (pthread_mutex_unlock): Likewise.
        (pthread_mutex_trylock): Likewise.
        (pthread_mutex_destroy): Likewise.
        * attr.c (pthread_attr_init): PTHREAD_EXPLICIT_SCHED is the
        default inheritance attribute; THREAD_PRIORITY_NORMAL is
        the default priority for new threads.
        * sched.c (pthread_attr_setschedpolicy): Added routine.
        (pthread_attr_getschedpolicy): Added routine.
        (pthread_attr_setinheritsched): Added routine.
        (pthread_attr_getinheritsched): Added routine.
        * pthread.h (sched_rr_set_interval): Added as a macro;
        returns -1 with errno set to ENOSYS.
2001-06-23  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>
        *sched.c (pthread_attr_setschedparam): Add priority range
        check.
        (sched_setscheduler): New function; checks for a valid
        pid and policy; checks for permission to set information
        in the target process; expects pid to be a Win32 process ID,
        not a process handle; the only scheduler policy allowed is
        SCHED_OTHER.
        (sched_getscheduler): Likewise, but checks for permission
        to query.
        * pthread.h (SCHED_*): Moved to sched.h as defined in the
        POSIX standard.
        * sched.h (SCHED_*): Moved from pthread.h.
        (pid_t): Defined if necessary.
        (sched_setscheduler): Defined.
        (sched_getscheduler): Defined.
        * pthread.def (sched_setscheduler): Exported.
        (sched_getscheduler): Likewise.
2001-06-23  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>
        Contributed by -  Ralf Brese <Ralf.Brese@pdb4.siemens.de>
        * create.c (pthread_create): Set thread priority from
        thread attributes. | 
|  | * pthread.h (rand_r): Fake using _seed argument to quell
	compiler warning (compiler should optimise this away later).
	* GNUmakefile (OPT): Leave symbolic information out of the library
	and increase optimisation level - for smaller faster prebuilt
	dlls.
2001-05-29  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>
	Contributed by  - Milan Gardian <Milan.Gardian@LEIBINGER.com>
	* Makefile: fix typo.
	* pthreads.h: Fix problems with stdcall/cdecl conventions, in particular
	remove the need for PT_STDCALL everywhere; remove warning supression.
	* (errno): Fix the longstanding "inconsistent dll linkage" problem
	with errno; now also works with /MD debugging libs -
	warnings emerged when compiling pthreads library with /MD (or /MDd)
	compiler switch, instead of /MT (or /MTd) (i.e. when compiling pthreads
	using Multithreaded DLL CRT instead of Multithreaded statically linked
	CRT).
	* create.c (pthread_create): Likewise; fix typo.
	* private.c (ptw32_threadStart): Eliminate use of terminate() which doesn't
	throw exceptions.
	* Remove unnecessary #includes from a number of modules -
	[I had to #include malloc.h in implement.h for gcc - rpj].
2001-05-29  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>
	Contributed by 	- Thomas Pfaff <tpfaff@gmx.net>
	* pthread.h (PTHREAD_MUTEX_DEFAULT): New; equivalent to
	PTHREAD_MUTEX_DEFAULT_NP.
	* (PTHREAD_MUTEX_NORMAL): Similarly.
	* (PTHREAD_MUTEX_ERRORCHECK): Similarly.
	* (PTHREAD_MUTEX_RECURSIVE): Similarly.
	* (pthread_mutex_setdefaultkind_np): New; Linux compatibility stub
	for pthread_mutexattr_settype.
	* (pthread_mutexattr_getkind_np): New; Linux compatibility stub
	for pthread_mutexattr_gettype.
	* mutex.c (pthread_mutexattr_settype): New; allow
	the following types of mutex:
	  PTHREAD_MUTEX_DEFAULT_NP
	  PTHREAD_MUTEX_NORMAL_NP
	  PTHREAD_MUTEX_ERRORCHECK_NP
	  PTHREAD_MUTEX_RECURSIVE_NP
	* Note that PTHREAD_MUTEX_DEFAULT is equivalent to
	PTHREAD_MUTEX_NORMAL - ie. mutexes should no longer
	be recursive by default, and a thread will deadlock if it
	tries to relock a mutex it already owns. This is inline with
	other pthreads implementations.
	* (pthread_mutex_lock): Process the lock request
	according to the mutex type.
	* (pthread_mutex_init): Eliminate use of Win32 mutexes as the
	basis of POSIX mutexes - instead, a combination of one critical section
	and one semaphore are used in conjunction with Win32 Interlocked* routines.
	* (pthread_mutex_destroy): Likewise.
	* (pthread_mutex_lock): Likewise.
	* (pthread_mutex_trylock): Likewise.
	* (pthread_mutex_unlock): Likewise.
	* Use longjmp/setjmp to implement cancelation when building the library
	using a C compiler which doesn't support exceptions, e.g. gcc -x c (note
	that gcc -x c++ uses exceptions).
	* Also fixed some of the same typos and eliminated PT_STDCALL as
	Milan Gardian's patches above.
2001-02-07  Ross Johnson  <rpj@special.ise.canberra.edu.au>
	Contributed by  - Alexander Terekhov <TEREKHOV@de.ibm.com>
	* rwlock.c: Revamped.
	* implement.h (pthread_rwlock_t_): Redefined.
	This implementation does not have reader/writer starvation problem.
	Rwlock attempts to behave more like a normal mutex with
	races and scheduling policy determining who is more important;
	It also supports recursive locking,
	has less synchronization overhead (no broadcasts at all,
	readers are not blocked on any condition variable) and seem to
	be faster than the current implementation [W98 appears to be
	approximately 15 percent faster at least - on top of speed increase
	from Thomas Pfaff's changes to mutex.c - rpj]. | 
|  | 2000-12-28  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * private.c (ptw32_threadStart): Unhandled exceptions are
        now passed through to the system to deal with. This is consistent
        with normal Windows behaviour. C++ applications may use
        set_terminate() to override the default behaviour which is
        to call ptw32_terminate(). Ptw32_terminate() cleans up some
        POSIX thread stuff before calling the system default function
        which calls abort(). The users termination function should conform
        to standard C++ semantics which is to not return. It should
        exit the thread (call pthread_exit()) or exit the application.
        * private.c (ptw32_terminate): Added as the default set_terminate()
        function. It calls the system default function after cleaning up
        some POSIX thread stuff.
        * implement.h (ptw32_try_enter_critical_section): Move
        declaration.
        * global.c (ptw32_try_enter_critical_section): Moved
        from dll.c.
        * dll.c: Move process and thread attach/detach code into
        functions in nonportable.c.
        * nonportable.c (pthread_win32_process_attach_np): Process
        attach code from dll.c is now available to static linked
        applications.
        * nonportable.c (pthread_win32_process_detach_np): Likewise.
        * nonportable.c (pthread_win32_thread_attach_np): Likewise.
        * nonportable.c (pthread_win32_thread_detach_np): Likewise.
        * pthread.h: Add new non-portable prototypes for static
        linked applications.
        * GNUmakefile (OPT): Increase optimisation flag and remove
        debug info flag.
        * pthread.def: Add new non-portable exports for static
        linked applications.
2000-12-11  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * FAQ: Update Answer 6 re getting a fully working
        Mingw32 built library.
2000-09-09  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * pthread.h (ctime_r): Fix arg.
./tests/ChangeLog:
2000-12-28  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * eyal1.c: Increase thread work loads.
        * exception2.c: New test.
        * exception3.c: New test.
        * Makefile: Add new tests exception2.c and exception3.c.
        * GNUmakefile: Likewise.
2000-12-11  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * cleanup3.c: Remove unused variable.
        * cleanup2.c: Likewise.
        * exception1.c: Throw an exception rather than use
        a deliberate zero divide so that catch(...) will
        handle it under Mingw32. Mingw32 now builds the
        library correctly to pass all tests - see Thomas
        Pfaff's detailed instructions re needed changes
        to Mingw32 in the Pthreads-Win32 FAQ. | 
|  | * errno.c: Add _MD precompile condition; thus far
        had no effect when using /MD compile option but I
        thnk it should be there.
        * exit.c: Add __cplusplus to various #if lines;
        was compiling SEH code even when VC++ had
        C++ compile options.
        * private.c: ditto.
        * create.c (pthread_create): Add PT_STDCALL macro to
        function pointer arg in _beginthread().
        * pthread.h: PT_STDCALL really does need to be defined
        in both this and impliment.h; don't set it to __cdecl
        - this macro is only used to extend function pointer
        casting for functions that will be passed as parameters.
        (~PThreadCleanup): add cast and group expression.
        (_errno): Add _MD compile conditional.
        (PtW32NoCatchWarn): Change pragma message.
        * implement.h: Move and change PT_STDCALL define.
        * need_errno.h: Add _MD to compilation conditional.
        * GNUmakefile: Substantial rewrite for new naming
        convention; set for nil optimisation (turn it up
        when we have a working library build; add target
        "fake.a" to build a libpthreadw32.a from the VC++
        built DLL pthreadVCE.dll.
        * pthread.def (LIBRARY): Don't specify in the .def
        file - it is specified on the linker command line
        since we now use the same .def file for variously
        named .dlls.
        * Makefile: Substantial rewrite for new naming
        convention; default nmake target only issues a
        help message; run nmake with specific target
        corresponding to the EH scheme being used.
        * README: Update information; add naming convention
        explanation.
        * ANNOUNCE: Update information.
2000-08-12  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * pthread.h: Add compile-time message when using
        MSC_VER compiler and C++ EH to warn application
        programmers to use PtW32Catch instead of catch(...)
        if they want cancelation and pthread_exit to work.
        * implement.h: Remove #include <semaphore.h>; we
        use our own local semaphore.h.
tests/ChangeLog:
2000-08-13  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * condvar3.c: Minor change to eliminate compiler
        warning.
        * condvar4.c: ditto.
        * condvar5.c: ditto.
        * condvar6.c: ditto.
        * condvar7.c: ditto.
        * condvar8.c: ditto.
        * condvar9.c: ditto.
        * exit1.c: Function needed return statement.
        * cleanup1.c: Remove unnecessary printf arg.
        * cleanup2.c: Fix cast.
        * rwlock6.c: Fix casts.
        * exception1.c (PtW32CatchAll): Had the wrong name;
        fix casts.
        * cancel3.c: Remove unused waitLock variable.
        * GNUmakefile: Change library/dll naming; add new tests;
        general minor changes.
        * Makefile: Change library/dll naming; add targets for
        testing each of the two VC++ EH scheme versions;
        default target now issues help message; compile warnings
        now interpreted as errors to stop the make; add new
        tests; restructure to remove prerequisites needed
        otherwise.
        * README: Updated. | 
|  | * cleanup.c (pthread_pop_cleanup): Remove _pthread
        prefix from __except and catch keywords; implement.h
        now simply undefines _pthread__except and
        _pthread_catch if defined; VC++ was not textually
        substituting _pthread_catch etc back to catch as
        it was redefined; the reason for using the prefixed
        version was to make it clear that it was not using
        the pthread.h redefined catch keyword.
        * private.c (_pthread_threadStart): Ditto.
        (_pthread_callUserDestroyRoutines): Ditto.
        * implement.h (_pthread__except): Remove #define.
        (_pthread_catch): Remove #define.
        * GNUmakefile (pthread.a): New target to build
        libpthread32.a from pthread.dll using dlltool.
        * buildlib.bat: Duplicate cl commands with args to
        build C++ EH version of pthread.dll; use of .bat
        files is redundant now that nmake compatible
        Makefile is included; used as a kludge only now.
        * Makefile: Localise some macros and fix up the clean:
        target to extend it and work properly.
        * CONTRIBUTORS: Add contributors.
        * ANNOUNCE: Updated.
        * README: Updated.
tests/ChangeLog:
2000-08-10  Ross Johnson  <rpj@special.ise.canberra.edu.au>
        * eyal1.c (main): Change implicit cast to explicit
        cast when passing "print_server" function pointer;
        G++ no longer allows implicit func parameter casts.
        * cleanup1.c: Remove unused "waitLock".
        (main): Fix implicit parameter cast.
        * cancel2.c (main): Fix implicit parameter cast.
        * cancel4.c (main): Fix implicit parameter cast.
        * cancel3.c (main): Fix implicit parameter cast.
        * GNUmakefile: Renamed from Makefile; Add missing
        cancel1 and cancel2 test targets.
        * Makefile: Converted for use with MS nmake. | 
|  |  | 
|  | - asynchronous cancellation added
	- attempt to hide internal exceptions from applications
	- kernel32 load/free problem fixed
	- new tests
	- changes only to comments in some tests | 
|  | * general: Patched for portability to WinCE. The details are
        described in the file WinCE-PORT. Follow the instructions
        in README.WinCE to make the appropriate changes in config.h.
        - Tristan Savatier <tristan@mpegtv.com> | 
|  |  | 
|  |  | 
|  | The following code for POSIX read/write locks was contributed
        by Aurelio Medina.
        * implement.h (pthread_rwlock_t_): Add.
        * pthread.h (pthread_rwlock_t): Add.
        (PTHREAD_RWLOCK_INITIALIZER): Add.
        Add rwlock function prototypes.
        * rwlock.c: New module.
        * pthread.def: Add new rwlock functions.
        * private.c (_pthread_processInitialize): initialise
        _pthread_rwlock_test_init_lock critical section.
        * global.c (_pthread_rwlock_test_init_lock): Add.
        * mutex.c (pthread_mutex_destroy): Don't free mutex memory
        if mutex is PTHREAD_MUTEX_INITIALIZER and has not been
        initialised yet.
tests/ChangeLog
Sep 15 1999  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * rwlock1.c: New test.
        * rwlock2.c: New test.
        * rwlock3.c: New test.
        * rwlock4.c: New test. | 
|  | * private.c (_pthread_threadStart): Return exit status from
        the application thread startup routine.
        - Milan Gardian <mg@tatramed.sk>
1999-08-18  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * exit.c (pthread_exit): Put status into pthread_t->exitStatus
        - John Bossom <john.Bossom@cognos.com>
        * private.c (_pthread_threadStart): Set pthread->exitStatus
        on exit of try{} block.
        - John Bossom <john.Bossom@cognos.com>
        * sync.c (pthread_join): use pthread_exitStatus value if the
        thread exit doesn't return a value (for Mingw32 CRTDLL
        which uses endthread instead of _endthreadex).
        - John Bossom <john.Bossom@cognos.com>
Tue Aug 17 20:17:58 CDT 1999  Mumit Khan  <khan@xraylith.wisc.edu>
        * create.c (pthread_create): Add CRTDLL suppport.
        * exit.c (pthread_exit): Likewise.
        * private.c (_pthread_threadStart): Likewise.
        (_pthread_threadDestroy): Likewise.
        * sync.c (pthread_join): Likewise.
        * tests/join1.c (main): Warn about partial support for CRTDLL.
Tue Aug 17 20:00:08 1999  Mumit Khan  <khan@xraylith.wisc.edu>
        * Makefile.in (LD): Delete entry point.
        * acconfig.h (STDCALL): Delete unused macro.
        * configure.in: Remove test for STDCALL.
        * config.h.in: Regenerate.
        * errno.c (_errno): Fix self type.
        * pthread.h (PT_STDCALL): Move from here to
        * implement.h (PT_STDCALL): here.
        (_pthread_threadStart): Fix prototype.
        * private.c (_pthread_threadStart): Likewise.
1999-08-14  Ross Johnson  <rpj@ixobrychus.canberra.edu.au>
        * exit.c (pthread_exit): Don't call pthread_self() but
        get thread handle directly from TSD for efficiency. | 
|  |  |