Subject: Dumb question regarding fork()d processes
To: #List NetBSD current users <current-users@NetBSD.ORG>
From: Paul Goyette <paul@whooppee.com>
List: current-users
Date: 08/18/1999 19:51:04
I just ran into this problem, and wondered whether it was working
correctly or if it's a bug. The original code is part of the amanda
backup package, amcheck.c, but what it basically does is:
1. malloc() some memory, store pointer to it in a char *msg
2. fork process 1, which does some stuff, and overwrite the stuff
that *msg points to
3. fork process 2, which attempts to use contents of *msg
4. main() then waits for both subprocesses to finish.
What actually happened is that when subprocess 1 overwrites the
memory block pointed to by *msg, both the main process and the
subproccess 2 see the new value!
I thought that when you did a fork(), the new process was supposed to
get its _own_ copy of the original process's address space. But in this
situation, it seems that all three processes are sharing the _same_ copy
of the malloc()d data structure!
Also, this just started happening after I updated from 1.4C to 1.4J
(-current as of Saturday 8/14/99); prior to that, everything worked
just fine!
-----------------------------------------------------------------------
| Paul Goyette | PGP DSS Key fingerprint: | E-mail addresses: |
| Network Engineer| BCD7 5301 9513 58A6 0DBC | paul@whooppee.com |
| & kernel hacker | 91EB ADB1 A280 3B79 9221 | pgoyette@juniper.net |
-----------------------------------------------------------------------