diff options
-rwxr-xr-x | amiga/schedule.c | 11 |
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; |