Blame src/posix-thread.c

Packit fc043f
/* posix-thread.c - GPGRT thread functions for POSIX systems
Packit fc043f
   Copyright (C) 2014 g10 Code GmbH
Packit fc043f
Packit fc043f
   This file is part of libgpg-error.
Packit fc043f
Packit fc043f
   libgpg-error is free software; you can redistribute it and/or
Packit fc043f
   modify it under the terms of the GNU Lesser General Public License
Packit fc043f
   as published by the Free Software Foundation; either version 2.1 of
Packit fc043f
   the License, or (at your option) any later version.
Packit fc043f
Packit fc043f
   libgpg-error is distributed in the hope that it will be useful, but
Packit fc043f
   WITHOUT ANY WARRANTY; without even the implied warranty of
Packit fc043f
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit fc043f
   Lesser General Public License for more details.
Packit fc043f
Packit fc043f
   You should have received a copy of the GNU Lesser General Public
Packit fc043f
   License along with this program; if not, see <https://www.gnu.org/licenses/>.
Packit fc043f
 */
Packit fc043f
Packit fc043f
#if HAVE_CONFIG_H
Packit fc043f
#include <config.h>
Packit fc043f
#endif
Packit fc043f
Packit fc043f
#ifdef HAVE_W32_SYSTEM
Packit fc043f
# error This module may not be build for Windows.
Packit fc043f
#endif
Packit fc043f
Packit fc043f
#include <stdlib.h>
Packit fc043f
#include <stdio.h>
Packit fc043f
#include <string.h>
Packit fc043f
#include <errno.h>
Packit fc043f
#include <unistd.h>  /* Get posix option macros.  */
Packit fc043f
Packit fc043f
#if USE_POSIX_THREADS
Packit fc043f
# ifdef _POSIX_PRIORITY_SCHEDULING
Packit fc043f
#  include <sched.h>
Packit fc043f
# endif
Packit fc043f
#elif USE_SOLARIS_THREADS
Packit fc043f
# include <thread.h>
Packit fc043f
#endif
Packit fc043f
Packit fc043f
#include "gpgrt-int.h"
Packit fc043f
Packit fc043f
#include "thread.h"
Packit fc043f
Packit fc043f
Packit fc043f
Packit fc043f
gpg_err_code_t
Packit fc043f
_gpgrt_yield (void)
Packit fc043f
{
Packit fc043f
#if USE_POSIX_THREADS
Packit fc043f
# ifdef _POSIX_PRIORITY_SCHEDULING
Packit fc043f
  _gpgrt_pre_syscall ();
Packit fc043f
  sched_yield ();
Packit fc043f
  _gpgrt_post_syscall ();
Packit fc043f
# else
Packit fc043f
  return GPG_ERR_NOT_SUPPORTED;
Packit fc043f
# endif
Packit fc043f
#elif USE_SOLARIS_THREADS
Packit fc043f
  _gpgrt_pre_syscall ();
Packit fc043f
  thr_yield ();
Packit fc043f
  _gpgrt_post_syscall ();
Packit fc043f
#else
Packit fc043f
  return GPG_ERR_NOT_SUPPORTED;
Packit fc043f
#endif
Packit fc043f
Packit fc043f
  return 0;
Packit fc043f
}