summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;