text: /*
   * @pthread.c
   * Implementation of pthread functions
   *
   * Copyright (c) 2011 Parallax, Inc.
   * Written by Eric R. Smith, Total Spectrum Software Inc.
   * MIT licensed (see terms at end of file)
   */
  
  #include <pthread.h>
  #include <errno.h>
  
  extern _pthread_queue_t __join_queue;
  
  int
  pthread_join(pthread_t thr, void **value_ptr)
  {
    _thread_state_t *thread;
    thread = _pthread_ptr(thr);
    if (!thread)
      {
        return -1;
      }
    if ( (thread->flags & _PTHREAD_DETACHED) )
      {
        errno = EINVAL;
        return -1;
      }
  
    __lock_pthreads();
    while (0 == (thread->flags & _PTHREAD_TERMINATED))
      {
        _pthread_sleep_with_lock(&__join_queue);
      }
    __unlock_pthreads();
    if (value_ptr)
      *value_ptr = thread->arg;
    _pthread_free(thread);
    return 0;
  }
  
  /* +--------------------------------------------------------------------
   * ¦  TERMS OF USE: MIT License
   * +--------------------------------------------------------------------
   * Permission is hereby granted, free of charge, to any person obtaining
   * a copy of this software and associated documentation files
   * (the "Software"), to deal in the Software without restriction,
   * including without limitation the rights to use, copy, modify, merge,
   * publish, distribute, sublicense, and/or sell copies of the Software,
   * and to permit persons to whom the Software is furnished to do so,
   * subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be
   * included in all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   * +--------------------------------------------------------------------
   */
  