* mmalloc.h (struct mdesc): Add FIXME comments to point out the

need to save some data on a per-process basis for mapped regions
	that are shared.
	* attach.c (reuse):  Update the morecore field for reused mapped
	regions to be correct for the current process.
This commit is contained in:
Fred Fish 1992-06-30 23:45:42 +00:00
parent 574fcd7b67
commit bc22f7de0c
2 changed files with 22 additions and 6 deletions

View File

@ -1,3 +1,11 @@
Tue Jun 30 16:44:41 1992 Fred Fish (fnf@cygnus.com)
* mmalloc.h (struct mdesc): Add FIXME comments to point out the
need to save some data on a per-process basis for mapped regions
that are shared.
* attach.c (reuse): Update the morecore field for reused mapped
regions to be correct for the current process.
Mon Jun 29 10:45:25 1992 Fred Fish (fnf at cygnus.com)
* mmtrace.c: Lint.

View File

@ -21,12 +21,16 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include "mmalloc.h"
#ifndef SEEK_SET
#define SEEK_SET 0
#endif
#if defined(HAVE_MMAP)
/* Forward declarations/prototypes for local functions */
static struct mdesc *reuse PARAMS ((int));
@ -62,9 +66,6 @@ static struct mdesc *reuse PARAMS ((int));
On failure returns NULL. */
#if defined(HAVE_MMAP)
PTR
mmalloc_attach (fd, baseaddr)
int fd;
@ -100,8 +101,8 @@ mmalloc_attach (fd, baseaddr)
then initialize the fields that we know values for. */
mdp = &mtemp;
memset ((char *) mdp, 0, sizeof (mtemp));
strncpy (mdp -> magic, MMALLOC_MAGIC, MMALLOC_MAGIC_SIZE);
(void) memset ((char *) mdp, 0, sizeof (mtemp));
(void) strncpy (mdp -> magic, MMALLOC_MAGIC, MMALLOC_MAGIC_SIZE);
mdp -> headersize = sizeof (mtemp);
mdp -> version = MMALLOC_VERSION;
mdp -> morecore = __mmalloc_mmap_morecore;
@ -130,7 +131,7 @@ mmalloc_attach (fd, baseaddr)
if ((mbase = mdp -> morecore (mdp, sizeof (mtemp))) != NULL)
{
memcpy (mbase, mdp, sizeof (mtemp));
(void) memcpy (mbase, mdp, sizeof (mtemp));
mdp = (struct mdesc *) mbase;
}
else
@ -155,6 +156,11 @@ mmalloc_attach (fd, baseaddr)
after we've switched over to using the mapped in malloc descriptor
rather than the temporary one on the stack.
Once we've switched over to using the mapped in malloc descriptor, we
have to update the pointer to the morecore function, since it almost
certainly will be at a different address if the process reusing the
mapped region is from a different executable.
Also note that if the heap being remapped previously used the mmcheck()
routines, we need to update the hooks since their target functions
will have certainly moved if the executable has changed in any way.
@ -181,6 +187,7 @@ reuse (fd)
{
mdp = (struct mdesc *) mtemp.base;
mdp -> fd = fd;
mdp -> morecore = __mmalloc_mmap_morecore;
if (mdp -> mfree_hook != NULL)
{
(void) mmcheck ((PTR) mdp, (void (*) PARAMS ((void))) NULL);
@ -196,6 +203,7 @@ reuse (fd)
to link to, but trying to initialize access to an mmap'd managed region
always fails. */
/* ARGSUSED */
PTR
mmalloc_attach (fd, baseaddr)
int fd;