Back to index

glibc  2.9
setsid.c File Reference
#include <errno.h>
#include <unistd.h>
#include <hurd.h>
#include <hurd/port.h>
#include <hurd/fd.h>

Go to the source code of this file.


pid_t __setsid (void)

Function Documentation

pid_t __setsid ( void  )

Definition at line 29 of file setsid.c.

  error_t err;
  unsigned int stamp;

  __mutex_lock (&_hurd_dtable_lock);

  stamp = _hurd_pids_changed_stamp; /* Atomic fetch.  */

  /* Tell the proc server we want to start a new session.  */
  err = __USEPORT (PROC, __proc_setsid (port));
  if (err)
    __mutex_unlock (&_hurd_dtable_lock);
      /* Punt our current ctty, and update the dtable accordingly.  We hold
        the dtable lock from before the proc_setsid call through clearing
        the cttyid port and processing the dtable, so that we can be sure
        that it's all done by the time the signal thread processes the
        pgrp change notification.  */
      _hurd_locked_install_cttyid (MACH_PORT_NULL);

      /* Synchronize with the signal thread to make sure we have received
        and processed proc_newids before returning to the user.
        This is necessary to ensure that _hurd_pgrp (and thus the value
        returned by `getpgrp ()' in other threads) has been updated before
        we return.  */
      while (_hurd_pids_changed_stamp == stamp)
#ifdef noteven
         /* XXX we have no need for a mutex, but cthreads demands one.  */
         __condition_wait (&_hurd_pids_changed_sync, NULL);
         __swtch_pri (0);


  return err ? __hurd_fail (err) : _hurd_pgrp;

Here is the call graph for this function: