struct hostent *
gethostbyname2(const char *name, int type)
{
  static struct hostent host, *hp;
  static char hostbuf[BUFSIZ];
  static int herr;
  int rval;

  static const ns_dtab dtab[] = {
    NS_FILES_CB(_ht_gethostbyname, NULL)
    { NSSRC_DNS, _dns_gethostbyname, NULL },
    NS_NIS_CB(_nis_gethostbyname, NULL) /* force -DHESIOD */
    { 0 }
  };

#ifdef HAVE_DD_LOCK
  __lock_acquire(name_lock);
#endif
  rval = nsdispatch((void *)&hp, dtab, NSDB_HOSTS, "gethostbyname",
                    default_src, name, type, &host, hostbuf, BUFSIZ, &herr);

#ifdef HAVE_DD_LOCK
  __lock_release(name_lock);
#endif
  if (rval != NS_SUCCESS)
    return NULL;
  else
    return hp;
}
Esempio n. 2
0
_VOID
_DEFUN_VOID (__tz_lock)
{
#ifndef __SINGLE_THREAD__
  __lock_acquire(__tz_lock_object);
#endif
}
Esempio n. 3
0
mode_t
umask (mode_t mask)
{
  mode_t old_mask;

  /* we need to lock so as to not interfere with getumask */
  __lock_acquire(umask_lock);
  old_mask = __umask (mask);
  __lock_release(umask_lock);

  return old_mask;
}
Esempio n. 4
0
mode_t
getumask (void)
{
  mode_t mask;

  __lock_acquire(umask_lock);

  mask = __umask (0);
  mask = __umask (mask);

  __lock_release(umask_lock);

  return mask;
}
Esempio n. 5
0
int __patmos_lock_acquire_recursive(_LOCK_RECURSIVE_T *lock) {
  const unsigned cnt = get_cpucnt();
  if (cnt > 1) {
    const unsigned char id = get_cpuid();
    _UNCACHED _LOCK_RECURSIVE_T *ll = (_UNCACHED _LOCK_RECURSIVE_T *)lock;

    if (ll->owner != id || ll->depth == 0) {
      __lock_acquire(lock->lock);
      ll->owner = id;
    }

    ll->depth++;
  }
  return 0;
}
Esempio n. 6
0
ssize_t
mq_receive (mqd_t msgid, char *msg, size_t msg_len, unsigned int *msg_prio)
{
  struct libc_mq *info;
  struct sembuf sb2 = {2, 1, 0};
  struct sembuf sb3 = {3, -1, IPC_NOWAIT};
  struct sembuf sb5 = {5, 1, IPC_NOWAIT};
  ssize_t num_bytes;
  int ipcflag;

  info = __find_mq (msgid);

  if (info == NULL || (info->oflag & O_ACCMODE) == O_WRONLY)
    {
      errno = EBADF;
      return -1;
    }

  if (msg_len < info->attr->mq_msgsize)
    {
      errno = EMSGSIZE;
      return -1;
    }

  __lock_acquire (mq_rdbuf_lock);

  ipcflag = (info->attr->mq_flags & O_NONBLOCK) ? IPC_NOWAIT : 0;

  semop (info->semid, &sb5, 1); /* increase number of readers */
  num_bytes = msgrcv (info->msgqid, info->rdbuf, msg_len, -MQ_PRIO_MAX, ipcflag);
  sb5.sem_op = -1;
  semop (info->semid, &sb5, 1); /* decrease number of readers */

  if (num_bytes != (ssize_t)-1)
    {
      semop (info->semid, &sb2, 1); /* add one to messages left to write */
      semop (info->semid, &sb3, 1); /* subtract one from messages to read */
      memcpy (msg, info->rdbuf->text, num_bytes);
      if (msg_prio != NULL)
	*msg_prio = MQ_PRIO_MAX - info->rdbuf->type;
    }
  
  __lock_release (mq_rdbuf_lock);
  return num_bytes;
}