OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [newlib-1.18.0/] [newlib-1.18.0-or32-1.0rc1/] [newlib/] [libc/] [stdlib/] [mlock.c] - Diff between revs 207 and 345

Only display areas with differences | Details | Blame | View Log

Rev 207 Rev 345
#ifndef MALLOC_PROVIDED
#ifndef MALLOC_PROVIDED
/*
/*
FUNCTION
FUNCTION
<<__malloc_lock>>, <<__malloc_unlock>>---lock malloc pool
<<__malloc_lock>>, <<__malloc_unlock>>---lock malloc pool
 
 
INDEX
INDEX
        __malloc_lock
        __malloc_lock
INDEX
INDEX
        __malloc_unlock
        __malloc_unlock
 
 
ANSI_SYNOPSIS
ANSI_SYNOPSIS
        #include <malloc.h>
        #include <malloc.h>
        void __malloc_lock (struct _reent *<[reent]>);
        void __malloc_lock (struct _reent *<[reent]>);
        void __malloc_unlock (struct _reent *<[reent]>);
        void __malloc_unlock (struct _reent *<[reent]>);
 
 
TRAD_SYNOPSIS
TRAD_SYNOPSIS
        void __malloc_lock(<[reent]>)
        void __malloc_lock(<[reent]>)
        struct _reent *<[reent]>;
        struct _reent *<[reent]>;
 
 
        void __malloc_unlock(<[reent]>)
        void __malloc_unlock(<[reent]>)
        struct _reent *<[reent]>;
        struct _reent *<[reent]>;
 
 
DESCRIPTION
DESCRIPTION
The <<malloc>> family of routines call these functions when they need to lock
The <<malloc>> family of routines call these functions when they need to lock
the memory pool.  The version of these routines supplied in the library use
the memory pool.  The version of these routines supplied in the library use
the lock API defined in sys/lock.h.  If multiple threads of execution can
the lock API defined in sys/lock.h.  If multiple threads of execution can
call <<malloc>>, or if <<malloc>> can be called reentrantly, then you need to
call <<malloc>>, or if <<malloc>> can be called reentrantly, then you need to
define your own versions of these functions in order to safely lock the
define your own versions of these functions in order to safely lock the
memory pool during a call.  If you do not, the memory pool may become
memory pool during a call.  If you do not, the memory pool may become
corrupted.
corrupted.
 
 
A call to <<malloc>> may call <<__malloc_lock>> recursively; that is,
A call to <<malloc>> may call <<__malloc_lock>> recursively; that is,
the sequence of calls may go <<__malloc_lock>>, <<__malloc_lock>>,
the sequence of calls may go <<__malloc_lock>>, <<__malloc_lock>>,
<<__malloc_unlock>>, <<__malloc_unlock>>.  Any implementation of these
<<__malloc_unlock>>, <<__malloc_unlock>>.  Any implementation of these
routines must be careful to avoid causing a thread to wait for a lock
routines must be careful to avoid causing a thread to wait for a lock
that it already holds.
that it already holds.
*/
*/
 
 
#include <malloc.h>
#include <malloc.h>
#include <sys/lock.h>
#include <sys/lock.h>
 
 
#ifndef __SINGLE_THREAD__
#ifndef __SINGLE_THREAD__
__LOCK_INIT_RECURSIVE(static, __malloc_lock_object);
__LOCK_INIT_RECURSIVE(static, __malloc_lock_object);
#endif
#endif
 
 
void
void
__malloc_lock (ptr)
__malloc_lock (ptr)
     struct _reent *ptr;
     struct _reent *ptr;
{
{
#ifndef __SINGLE_THREAD__
#ifndef __SINGLE_THREAD__
  __lock_acquire_recursive (__malloc_lock_object);
  __lock_acquire_recursive (__malloc_lock_object);
#endif
#endif
}
}
 
 
void
void
__malloc_unlock (ptr)
__malloc_unlock (ptr)
     struct _reent *ptr;
     struct _reent *ptr;
{
{
#ifndef __SINGLE_THREAD__
#ifndef __SINGLE_THREAD__
  __lock_release_recursive (__malloc_lock_object);
  __lock_release_recursive (__malloc_lock_object);
#endif
#endif
}
}
 
 
#endif
#endif
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.