This is the pthread implementation of dietlibc.
Written from scratch by Olaf Dreesen.

Wed Sep 17 17:03:57 CEST 2003

  - add the semaphore support. (changed the internals of the manager a
    little for this.)
  - fixed pthread_create so that it does not change the global thread
    cancel-type on error.

Mon Aug 18 17:32:52 CEST 2003

  checkin.

Mon Aug 18 17:27:57 CEST 2003

  more preparations for checkin

Sat Aug 16 17:35:25 CEST 2003

  more cleanup. prepare for checkin

Thu Aug 14 14:16:22 CEST 2003

  minor cleanups...

Wed Jul 23 16:05:28 CEST 2003

  last SIGSEGV found and fixed

  TODO:
  - test everything in the real-world :)

Wed Jul  7 19:34:02 CEST 2003

  new algorithm lead to SIGSEGV on a busy system....

  TODO:
  - fix the SIGSEGV

Wed Jun  4 18:55:18 CEST 2003

  cleanup the internal functions (fewer calls to __thread_self())

  TODO:
  - test the "hash" based find algorithm

Wed May 21 13:48:56 CEST 2003

  TODO:
  - use a better algorithm to find a thread (act. O(n))

Mon May 19 14:40:55 CEST 2003

  - the 2.5+ kernel do a SIGKILL on ALL threads if one makes a
    "critical" error (SIG{SEGV,FPE,...})

Wed Apr 30 16:31:10 CEST 2003

  FIXED:
  - cancellation points...
  - warning about structure initialization


Wed Apr 23 19:02:38 CEST 2003

  WORKING STUFF:
  - basic pthread functions are working.
  - fork with pthread_atfork handlers working.
  - unix signales are working (per thread).
    If a thread is terminated by the default signalhandler (exit on signal)
    the same signal is send to all threads. (e.g. SIGSEGV,SIGFPE,...)

  TODO:
  - async cancelation: manager lock-up (no idea for a fix yet)

Wed Feb 19 20:20:20 CET 2003

  changed the __thread_self function to use the machine specific register
  instead of the __buildin_frame_pointer; because the least is !? NOT !? the
  stack-pointer if we omit the frame-pointer...
  TODO: no changes since last time

Wed Feb 12 16:04:36 CET 2003

  the basic functions are working now.
  TODO:
  - async cancelation manager lock-up fix
  - UNIX-signal test

Thu Aug 29 16:37:18 MEST 2002

  total rewrite complete...
  - signal handling is now more like the standard says
  - use signals for restart(join,) and cancel events
  - depends on working clone,sig{set,long}jmp and __testandset

Mon Aug 19 20:40:31 MEST 2002

  The signal handling is/was broken...
  Changed the internal structure a bit (or better total rewrite)

Mon Aug  6 15:46:39 MEST 2001

  Ups... did the wrong error handling... the error is returned not put to
  errno...
  probably thread_key is not SMP save...

Thu Apr 12 16:47:12 MEST 2001

  added conditional variables...
  except pthread_cond_timedwait all should work man-page like
  pthread_cond_timedwait dosen't handle cancel request according to man-page

  added thread specific key handling (all according to man-page)

Fri Mar 30 18:47:37 MEST 2001

  uff found some logic errors and fixed them.
  pthread_create had a problem with user provided stacks.


Fri Mar 23 14:09:54 MET 2001

  arg.. the kernel-header are so inconsistent...
  on x86 it works on arm and sparc not due to MISSING defines, miss-places
  includes and __KERNEL__ checks....
  the best in this category is that the kernel-header are changed that the
  buggy (g)libc haven't to change... (f..k glibc, the headers HAVE to be
  CONSISTENT)
  a public defined symbol on arch X have to be in Y too unless marked...
  that is mainly speaking SCHED.H ! arg....


Wed Mar 14 04:28:45 MET 2001

  I have implemented the "Manager Thread" so that nested thread creation
  works. really ugly stuff... don't look at it unless you're sitting on solid
  ground.


Mon Mar 12 16:16:00 CET 2001

  first of all:
  I strongly suggest NOT to use it yet, it's very, very, ... very
  experimental. I guess you got the point. there is still much debug code,
  incomplete functions and unusable states....

  I'm still working on the final alpha...

