summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--amiga/gui.c7
-rwxr-xr-xamiga/schedule.c53
-rwxr-xr-xamiga/schedule.h5
3 files changed, 32 insertions, 33 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index 3c11d527d..35e3b4ed9 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2949,7 +2949,6 @@ static void gui_quit(void)
LOG(("Freeing scheduler"));
ami_schedule_free();
- ami_schedule_close_timer();
FreeObjList(window_list);
@@ -5265,8 +5264,10 @@ int main(int argc, char** argv)
ami_mime_init("PROGDIR:Resources/mimetypes");
sprintf(temp, "%s/mimetypes.user", current_user_dir);
ami_mime_init(temp);
- ami_schedule_open_timer();
- ami_schedule_create();
+ if(ami_schedule_create() == false) {
+ ami_misc_fatal_error("Failed to initialise scheduler");
+ return RETURN_FAIL;
+ }
amiga_plugin_hack_init();
ret = amiga_datatypes_init();
diff --git a/amiga/schedule.c b/amiga/schedule.c
index 6222917cf..7b54dc8f3 100755
--- a/amiga/schedule.c
+++ b/amiga/schedule.c
@@ -81,7 +81,7 @@ static nserror ami_schedule_add_timer_event(struct nscallback *nscb, int t)
GetSysTime(&tv);
AddTime(&nscb->tv,&tv); // now contains time when event occurs
- if(nscb->treq = AllocVecTagList(sizeof(struct TimeRequest), NULL)) {
+ if((nscb->treq = AllocVecTagList(sizeof(struct TimeRequest), NULL))) {
*nscb->treq = *tioreq;
nscb->treq->Request.io_Command=TR_ADDREQUEST;
nscb->treq->Time.Seconds=nscb->tv.Seconds; // secs
@@ -160,7 +160,6 @@ static nserror ami_schedule_reschedule(struct nscallback *nscb, int t)
static nserror schedule_remove(void (*callback)(void *p), void *p)
{
- PblIterator *iterator;
struct nscallback *nscb;
nscb = ami_schedule_locate(callback, p, true);
@@ -214,8 +213,7 @@ void schedule_run(BOOL poll)
if(nscb == -1) return;
- if(poll)
- {
+ if(poll) {
/* Ensure the scheduled event time has passed (CmpTime<=0)
* For timer signalled events this must *always* be true,
* so we save some time by only checking if we're polling.
@@ -233,25 +231,7 @@ void schedule_run(BOOL poll)
callback(p);
}
-/* exported function documented in amiga/schedule.h */
-BOOL ami_schedule_create(void)
-{
- schedule_list = pblHeapNew();
- if(schedule_list == PBL_ERROR_OUT_OF_MEMORY) return false;
-
- pblHeapSetCompareFunction(schedule_list, ami_schedule_compare);
-}
-
-/* exported function documented in amiga/schedule.h */
-void ami_schedule_free(void)
-{
- schedule_remove_all();
- pblHeapFree(schedule_list); // this should be empty at this point
- schedule_list = NULL;
-}
-
-/* exported function documented in amiga/schedule.h */
-void ami_schedule_open_timer(void)
+static void ami_schedule_open_timer(void)
{
msgport = AllocSysObjectTags(ASOT_PORT,
ASO_NoTrack,FALSE,
@@ -269,8 +249,7 @@ void ami_schedule_open_timer(void)
ITimer = (struct TimerIFace *)GetInterface((struct Library *)TimerBase,"main",1,NULL);
}
-/* exported function documented in amiga/schedule.h */
-void ami_schedule_close_timer(void)
+static void ami_schedule_close_timer(void)
{
if(ITimer) DropInterface((struct Interface *)ITimer);
CloseDevice((struct IORequest *) tioreq);
@@ -279,6 +258,28 @@ void ami_schedule_close_timer(void)
}
/* exported function documented in amiga/schedule.h */
+bool ami_schedule_create(void)
+{
+ ami_schedule_open_timer();
+ schedule_list = pblHeapNew();
+ if(schedule_list == PBL_ERROR_OUT_OF_MEMORY) return false;
+
+ pblHeapSetCompareFunction(schedule_list, ami_schedule_compare);
+
+ return true;
+}
+
+/* exported function documented in amiga/schedule.h */
+void ami_schedule_free(void)
+{
+ schedule_remove_all();
+ pblHeapFree(schedule_list); // this should be empty at this point
+ schedule_list = NULL;
+
+ ami_schedule_close_timer();
+}
+
+/* exported function documented in amiga/schedule.h */
nserror ami_schedule(int t, void (*callback)(void *p), void *p)
{
struct nscallback *nscb;
@@ -286,7 +287,7 @@ nserror ami_schedule(int t, void (*callback)(void *p), void *p)
if(schedule_list == NULL) return NSERROR_INIT_FAILED;
if (t < 0) return schedule_remove(callback, p);
- if (nscb = ami_schedule_locate(callback, p, false)) {
+ if ((nscb = ami_schedule_locate(callback, p, false))) {
return ami_schedule_reschedule(nscb, t);
}
diff --git a/amiga/schedule.h b/amiga/schedule.h
index 659230627..9546df94f 100755
--- a/amiga/schedule.h
+++ b/amiga/schedule.h
@@ -45,7 +45,7 @@ nserror ami_schedule(int t, void (*callback)(void *p), void *p);
*
* /return true if initialised ok or false on error.
*/
-BOOL ami_schedule_create(void);
+bool ami_schedule_create(void);
/**
* Finalise amiga scheduler
@@ -62,7 +62,4 @@ void ami_schedule_free(void);
*/
void schedule_run(BOOL poll);
-void ami_schedule_open_timer(void);
-void ami_schedule_close_timer(void);
-
#endif