Dolda2000 GitWeb
/
ashd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
lib: Fixed obvious memory leak in simpleerror.
[ashd.git]
/
lib
/
proc.c
diff --git
a/lib/proc.c
b/lib/proc.c
index
2e61e92
..
8646434
100644
(file)
--- a/
lib/proc.c
+++ b/
lib/proc.c
@@
-31,7
+31,7
@@
#include <proc.h>
#include <req.h>
#include <proc.h>
#include <req.h>
-int stdmkchild(char **argv)
+int stdmkchild(char **argv
, void (*chinit)(void *), void *idata
)
{
int i;
pid_t pid;
{
int i;
pid_t pid;
@@
-42,6
+42,8
@@
int stdmkchild(char **argv)
if((pid = fork()) < 0)
return(-1);
if(pid == 0) {
if((pid = fork()) < 0)
return(-1);
if(pid == 0) {
+ if(chinit != NULL)
+ chinit(idata);
for(i = 3; i < FD_SETSIZE; i++) {
if(i != fd[0])
close(i);
for(i = 3; i < FD_SETSIZE; i++) {
if(i != fd[0])
close(i);
@@
-124,7
+126,7
@@
int recvfd(int sock, char **data, size_t *datalen)
return(fd);
}
return(fd);
}
-pid_t stdforkserve(char **argv, struct hthead *req, int fd)
+pid_t stdforkserve(char **argv, struct hthead *req, int fd
, void (*chinit)(void *), void *idata
)
{
int i;
char *ebuf, *p;
{
int i;
char *ebuf, *p;
@@
-134,6
+136,9
@@
pid_t stdforkserve(char **argv, struct hthead *req, int fd)
if((pid = fork()) < 0)
return(-1);
if(pid == 0) {
if((pid = fork()) < 0)
return(-1);
if(pid == 0) {
+ if(chinit != NULL)
+ chinit(idata);
+
dup2(fd, 0);
dup2(fd, 1);
for(i = 3; i < FD_SETSIZE; i++)
dup2(fd, 0);
dup2(fd, 1);
for(i = 3; i < FD_SETSIZE; i++)