aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ndb/dnarea.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/ndb/dnarea.c')
-rwxr-xr-xsrc/cmd/ndb/dnarea.c32
1 files changed, 9 insertions, 23 deletions
diff --git a/src/cmd/ndb/dnarea.c b/src/cmd/ndb/dnarea.c
index 9f0338b6..05c9d004 100755
--- a/src/cmd/ndb/dnarea.c
+++ b/src/cmd/ndb/dnarea.c
@@ -91,12 +91,15 @@ freearea(Area **l)
* this entails running a command 'zonerefreshprogram'. This could
* copy over databases from elsewhere or just do a zone transfer.
*/
-/* XXX WRONG - can't use fork and exec */
void
refresh_areas(Area *s)
{
- int pid;
Waitmsg *w;
+ char *argv[3];
+
+ argv[0] = zonerefreshprogram;
+ argv[1] = "XXX";
+ argv[2] = nil;
for(; s != nil; s = s->next){
if(!s->needrefresh)
@@ -107,26 +110,9 @@ refresh_areas(Area *s)
continue;
}
- switch(pid = fork()){
- case -1:
- break;
- case 0:
- execl(zonerefreshprogram, "zonerefresh", s->soarr->owner->name, 0);
- threadexitsall(0);
- break;
- default:
- for(;;){
- w = wait();
- if(w == nil)
- break;
- if(w->pid == pid){
- if(w->msg == nil || *w->msg == 0)
- s->needrefresh = 0;
- free(w);
- break;
- }
- free(w);
- }
- }
+ argv[1] = s->soarr->owner->name;
+ w = runproc(argv[0], argv, 0);
+ free(w);
}
}
+