X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/acbb75da93aabcc72d26ea4a40de0055264bf24c..5d34793ea0d4548ea73e2a7182428472c40ba0b4:/src/xbt/mmalloc/mmprivate.h diff --git a/src/xbt/mmalloc/mmprivate.h b/src/xbt/mmalloc/mmprivate.h index ff0d970bed..e92aec96d9 100644 --- a/src/xbt/mmalloc/mmprivate.h +++ b/src/xbt/mmalloc/mmprivate.h @@ -2,30 +2,19 @@ Copyright 1990, 1991, 1992 Free Software Foundation Written May 1989 by Mike Haertel. - Heavily modified Mar 1992 by Fred Fish. (fnf@cygnus.com) + Heavily modified Mar 1992 by Fred Fish. (fnf@cygnus.com) */ -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. - - The author may be reached (Email) at the address mike@ai.mit.edu, - or (US mail) as Mike Haertel c/o Free Software Foundation. */ +/* Copyright (c) 2010. The SimGrid Team. + * All rights reserved. */ +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef __MMPRIVATE_H #define __MMPRIVATE_H 1 +#include "portable.h" +#include "xbt/xbt_os_thread.h" #include "xbt/mmalloc.h" #ifdef HAVE_LIMITS_H @@ -89,8 +78,12 @@ Boston, MA 02111-1307, USA. #define ADDRESS(B) ((void*) (((ADDR2UINT(B)) - 1) * BLOCKSIZE + (char*) mdp -> heapbase)) -/* Data structure giving per-block information. */ +/* Thread-safety (if the mutex is already created)*/ +#define LOCK(mdp) if (mdp->mutex) xbt_os_mutex_acquire(mdp->mutex) +#define UNLOCK(mdp) if (mdp->mutex) xbt_os_mutex_release(mdp->mutex) +const char *xbt_thread_self_name(void); +/* Data structure giving per-block information. */ typedef union { /* Heap information for a busy block. */ @@ -157,28 +150,23 @@ struct mstats managing, and thus also becomes the file header for the mapped file, if such a file exists. */ -struct mdesc -{ +struct mdesc { + xbt_os_mutex_t mutex; /* The "magic number" for an mmalloc file. */ - char magic[MMALLOC_MAGIC_SIZE]; /* The size in bytes of this structure, used as a sanity check when reusing a previously created mapped file. */ - unsigned int headersize; /* The version number of the mmalloc package that created this file. */ - unsigned char version; /* Some flag bits to keep track of various internal things. */ - unsigned int flags; /* If a system call made by the mmalloc package fails, the errno is preserved for future examination. */ - int saved_errno; /* Pointer to the function that is used to get more core, or return core @@ -190,7 +178,6 @@ struct mdesc FIXME: For mapped regions shared by more than one process, this needs to be maintained on a per-process basis. */ - void* (*morecore) (struct mdesc *mdp, int size); /* Pointer to the function that causes an abort when the memory checking @@ -199,45 +186,37 @@ struct mdesc FIXME: For mapped regions shared by more than one process, this needs to be maintained on a per-process basis. */ - void (*abortfunc) (void); /* Debugging hook for free. FIXME: For mapped regions shared by more than one process, this needs to be maintained on a per-process basis. */ - void (*mfree_hook) (void* mdp, void* ptr); /* Debugging hook for `malloc'. FIXME: For mapped regions shared by more than one process, this needs to be maintained on a per-process basis. */ - void* (*mmalloc_hook) (void* mdp, size_t size); /* Debugging hook for realloc. FIXME: For mapped regions shared by more than one process, this needs to be maintained on a per-process basis. */ - void* (*mrealloc_hook) (void* mdp, void* ptr, size_t size); /* Number of info entries. */ - size_t heapsize; /* Pointer to first block of the heap (base of the first block). */ - void* heapbase; /* Current search index for the heap table. */ /* Search index in the info table. */ - size_t heapindex; /* Limit of valid info table indices. */ - size_t heaplimit; /* Block information table. @@ -307,16 +286,13 @@ extern struct mdesc *__mmalloc_default_mdp; /* Initialize the first use of the default malloc descriptor, which uses an sbrk() region. */ -extern struct mdesc *__mmalloc_sbrk_init (void); +extern struct mdesc *__mmalloc_create_default_mdp (void); /* Grow or shrink a contiguous mapped region using mmap(). - Works much like sbrk() */ - -#if defined(HAVE_MMAP) + Works much like sbrk(), only faster */ extern void* __mmalloc_mmap_morecore (struct mdesc *mdp, int size); -#endif /* Remap a mmalloc region that was previously mapped. */ @@ -330,9 +306,7 @@ extern void* __mmalloc_remap_core (struct mdesc *mdp); #define MD_TO_MDP(md) \ ((md) == NULL \ - ? (__mmalloc_default_mdp == NULL \ - ? __mmalloc_sbrk_init () \ - : __mmalloc_default_mdp) \ + ? __mmalloc_default_mdp \ : (struct mdesc *) (md)) #endif /* __MMPRIVATE_H */