diff options
-rw-r--r-- | mmalloc/TODO | 15 | ||||
-rw-r--r-- | mmalloc/sbrk-sup.c | 69 |
2 files changed, 84 insertions, 0 deletions
diff --git a/mmalloc/TODO b/mmalloc/TODO new file mode 100644 index 0000000..46bccc2 --- /dev/null +++ b/mmalloc/TODO @@ -0,0 +1,15 @@ +(1) Make implementation changes necessary to allow multiple processes + to use the mmalloc managed region simultaneously. This requires, + at the minimum, some sort of cooperative locking that ensures that + only one process at a time is changing any of the mmalloc managed + data structures (its ok for the mmalloc managed data regions to be + changed at any time since we don't care about their contents). + +(2) In order to support multiple processes using the mmalloc managed + region, the malloc descriptor needs to be broken into two parts, + one part which is specific to the given process and is maintained + separately on a per process basis, and another part which is common + to all processes. As an example, the file descriptor is specific + to a given process, as are the morecore and abortfunc pointers. + However magic[], the version number, the flags field, etc are + common to all processes. diff --git a/mmalloc/sbrk-sup.c b/mmalloc/sbrk-sup.c new file mode 100644 index 0000000..f6efa17 --- /dev/null +++ b/mmalloc/sbrk-sup.c @@ -0,0 +1,69 @@ +/* Support for sbrk() regions. + Copyright 1992 Free Software Foundation, Inc. + Contributed by Fred Fish at Cygnus Support. fnf@cygnus.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + + +#include <string.h> /* Prototypes for memcpy, memmove, memset, etc */ + +#include "mmalloc.h" + +extern PTR sbrk (); + +/* The mmalloc() package can use a single implicit malloc descriptor + for mmalloc/mrealloc/mfree operations which do not supply an explicit + descriptor. For these operations, sbrk() is used to obtain more core + from the system, or return core. This allows mmalloc() to provide + backwards compatibility with the non-mmap'd version. */ + +struct mdesc *__mmalloc_default_mdp; + +/* Use sbrk() to get more core. */ + +static PTR +sbrk_morecore (mdp, size) + struct mdesc *mdp; + int size; +{ + PTR result; + + if ((result = sbrk (size)) != NULL) + { + mdp -> breakval += size; + mdp -> top += size; + } + return (result); +} + +/* Initialize the default malloc descriptor if this is the first time + a request has been made to use the default sbrk'd region. */ + +struct mdesc * +__mmalloc_sbrk_init () +{ + PTR base; + + base = sbrk (0); + __mmalloc_default_mdp = (struct mdesc *) sbrk (sizeof (struct mdesc)); + (void) memset ((char *) __mmalloc_default_mdp, 0, sizeof (struct mdesc)); + __mmalloc_default_mdp -> morecore = sbrk_morecore; + __mmalloc_default_mdp -> base = base; + __mmalloc_default_mdp -> breakval = __mmalloc_default_mdp -> top = sbrk (0); + __mmalloc_default_mdp -> fd = -1; + return (__mmalloc_default_mdp); +} + + |