/* * %CopyrightBegin% * * Copyright Ericsson AB 2004-2009. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * %CopyrightEnd% */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "sys.h" #include "erl_driver.h" /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\ * * * ------------------------- OBSOLETE! DO NOT USE! ------------------------- * * * \* */ /* cut from ../obsolete/driver.h (since it doesn't mix well with other * headers from the emulator). */ #ifdef __WIN32__ #ifdef CONST # undef CONST #endif #endif #if ((defined(__STDC__) || defined(SABER)) && !defined(NO_PROTOTYPE)) || defined(__cplusplus) || defined(USE_PROTOTYPE) # define _USING_PROTOTYPES_ 1 # define _ANSI_ARGS_(x) x # define CONST const #else # define _ANSI_ARGS_(x) () # define CONST #endif typedef void* erl_mutex_t; typedef void* erl_cond_t; typedef void* erl_thread_t; EXTERN erl_mutex_t erts_mutex_create _ANSI_ARGS_((void)); EXTERN int erts_mutex_destroy _ANSI_ARGS_((erl_mutex_t)); EXTERN int erts_mutex_lock _ANSI_ARGS_((erl_mutex_t)); EXTERN int erts_mutex_unlock _ANSI_ARGS_((erl_mutex_t)); EXTERN erl_cond_t erts_cond_create _ANSI_ARGS_((void)); EXTERN int erts_cond_destroy _ANSI_ARGS_((erl_cond_t)); EXTERN int erts_cond_signal _ANSI_ARGS_((erl_cond_t)); EXTERN int erts_cond_broadcast _ANSI_ARGS_((erl_cond_t)); EXTERN int erts_cond_wait _ANSI_ARGS_((erl_cond_t, erl_mutex_t)); EXTERN int erts_cond_timedwait _ANSI_ARGS_((erl_cond_t, erl_mutex_t, long)); EXTERN int erts_thread_create _ANSI_ARGS_((erl_thread_t*, void* (*func)(void*), void* arg, int detached)); EXTERN erl_thread_t erts_thread_self _ANSI_ARGS_((void)); EXTERN void erts_thread_exit _ANSI_ARGS_((void*)); EXTERN int erts_thread_join _ANSI_ARGS_((erl_thread_t, void**)); EXTERN int erts_thread_kill _ANSI_ARGS_((erl_thread_t)); /* * These functions implement the thread interface in ../obsolete/driver.h. * Do *not* use this interface! Within the emulator, use the erl_threads.h, * erl_smp.h, or ethread.h interface. From a driver use the thread interface * in erl_driver.h. */ erl_mutex_t erts_mutex_create(void) { return (erl_mutex_t) erl_drv_mutex_create(NULL); } int erts_mutex_destroy(erl_mutex_t mtx) { erl_drv_mutex_destroy((ErlDrvMutex *) mtx); return 0; } int erts_mutex_lock(erl_mutex_t mtx) { erl_drv_mutex_lock((ErlDrvMutex *) mtx); return 0; } int erts_mutex_unlock(erl_mutex_t mtx) { erl_drv_mutex_unlock((ErlDrvMutex *) mtx); return 0; } erl_cond_t erts_cond_create(void) { return (erl_cond_t) erl_drv_cond_create(NULL); } int erts_cond_destroy(erl_cond_t cnd) { erl_drv_cond_destroy((ErlDrvCond *) cnd); return 0; } int erts_cond_signal(erl_cond_t cnd) { erl_drv_cond_signal((ErlDrvCond *) cnd); return 0; } int erts_cond_broadcast(erl_cond_t cnd) { erl_drv_cond_broadcast((ErlDrvCond *) cnd); return 0; } int erts_cond_wait(erl_cond_t cnd, erl_mutex_t mtx) { erl_drv_cond_wait((ErlDrvCond *) cnd, (ErlDrvMutex *) mtx); return 0; } int erts_cond_timedwait(erl_cond_t cnd, erl_mutex_t mtx, long ms) { return ENOTSUP; } int erts_thread_create(erl_thread_t *tid, void* (*func)(void*), void* arg, int detached) { if (detached) return ENOTSUP; return erl_drv_thread_create(NULL, (ErlDrvTid *) tid, func, arg, NULL); } erl_thread_t erts_thread_self(void) { return (erl_thread_t) erl_drv_thread_self(); } void erts_thread_exit(void *res) { erl_drv_thread_exit(res); } int erts_thread_join(erl_thread_t tid, void **respp) { return erl_drv_thread_join((ErlDrvTid) tid, respp); } int erts_thread_kill(erl_thread_t tid) { return ENOTSUP; }