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 "mmalloc.h"
+#include "xbt/xbt_os_thread.h"
+#include "xbt/mmalloc.h"
#ifdef HAVE_LIMITS_H
# include <limits.h>
#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. */
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
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
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.
/* 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. */
#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 */