summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2014-11-17 22:33:49 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2014-11-17 22:33:49 +0000
commit8368b124ab4f7c98d24eea43e775ac630d50c89b (patch)
treecada92125d8140ad5be6558ffba3be4fe3c8e421
parent1379a13fa521e6f499eefa10ec3f430c2844f6d4 (diff)
downloadnetsurf-chris/newproc-scheduler.tar.gz
Make a copy of nscallback for the new processchris/newproc-scheduler
-rwxr-xr-xamiga/schedule.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/amiga/schedule.c b/amiga/schedule.c
index 03c061402..fb30cbae9 100755
--- a/amiga/schedule.c
+++ b/amiga/schedule.c
@@ -212,6 +212,7 @@ static int32 ami_schedule_process(STRPTR args, int32 length, APTR execbase)
callback = nscb->callback;
p = nscb->p;
+ FreeVec(nscb);
callback(p);
@@ -222,7 +223,7 @@ static int32 ami_schedule_process(STRPTR args, int32 length, APTR execbase)
/* exported function documented in amiga/schedule.h */
void schedule_run(BOOL poll)
{
- struct nscallback *nscb;
+ struct nscallback *nscb, *nscb2;
void (*callback)(void *p);
void *p;
struct TimeVal tv;
@@ -242,16 +243,20 @@ void schedule_run(BOOL poll)
}
if(nscb->callback == llcache_persist) {
+
+ nscb2 = AllocVecTagList(sizeof(struct nscallback), NULL);
+ CopyMem(nscb, nscb2, sizeof(struct nscallback));
+
LOG(("New process %p", nscb->callback));
CreateNewProcTags(
NP_Entry, ami_schedule_process,
NP_Child, TRUE,
- NP_UserData, nscb,
+ NP_UserData, nscb2,
TAG_DONE);
ami_schedule_remove_timer_event(nscb);
pblHeapRemoveFirst(schedule_list);
-// FreeVec(nscb);
+ FreeVec(nscb);
} else {
callback = nscb->callback;
p = nscb->p;