Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/b63443b243bec435c1650aef2068299674b2a209
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/b63443b243bec435c1650aef2068299674b2a209
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/b63443b243bec435c1650aef2068299674b2a209

The branch, master has been updated
       via  b63443b243bec435c1650aef2068299674b2a209 (commit)
      from  4b14f9ff37b4c0614a8f039aa393aa3c6bb86c97 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=b63443b243bec435c1650aef2068299674b2a209
commit b63443b243bec435c1650aef2068299674b2a209
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>

    Use the API for duplicating IORequests
    Add some more debug:
      It appears that some timer events are not being picked up, I can see in 
the log that something which should have been signalled is not being run.
    Enabling the log appears to make the situation worse.

diff --git a/frontends/amiga/schedule.c b/frontends/amiga/schedule.c
index 7698129..8abdca5 100644
--- a/frontends/amiga/schedule.c
+++ b/frontends/amiga/schedule.c
@@ -21,6 +21,7 @@
 #include <proto/dos.h>
 #include <proto/exec.h>
 #include <proto/timer.h>
+#include <proto/utility.h> /* For Amiga2Date */
 
 #include <stdio.h>
 #include <stdbool.h>
@@ -46,8 +47,6 @@ struct Device *TimerBase;
 struct TimerIFace *ITimer;
 #endif
 
-static APTR restrict pool_nscb = NULL;
-
 static PblHeap *schedule_list;
 
 /**
@@ -173,7 +172,7 @@ static nserror schedule_remove(void (*callback)(void *p), 
void *p)
        if(nscb != NULL) {
                LOG("deleted callback %p", nscb);
                ami_schedule_remove_timer_event(nscb);
-               ami_misc_itempool_free(pool_nscb, nscb, sizeof(struct 
nscallback));
+               FreeSysObject(ASOT_IOREQUEST, nscb);
                pblHeapConstruct(schedule_list);
        }
 
@@ -193,7 +192,7 @@ static void schedule_remove_all(void)
        {
                ami_schedule_remove_timer_event(nscb);
                pblIteratorRemove(iterator);
-               ami_misc_itempool_free(pool_nscb, nscb, sizeof(struct 
nscallback));
+               FreeSysObject(ASOT_IOREQUEST, nscb);
        };
 
        pblIteratorFree(iterator);
@@ -208,6 +207,35 @@ static int ami_schedule_compare(const void *prev, const 
void *next)
        return CmpTime(&nscb1->tv, &nscb2->tv);
 }
 
+/* Outputs all scheduled events to the log */
+static void ami_schedule_dump(void)
+{
+       PblIterator *iterator;
+       struct nscallback *nscb;
+       struct ClockData clockdata;
+       
+       if(pblHeapIsEmpty(schedule_list)) return;
+
+       struct TimeVal tv;
+       GetSysTime(&tv);
+       Amiga2Date(tv.Seconds, &clockdata);
+       
+       LOG("Current time = %d-%d-%d %d:%d:%d.%d", clockdata.mday, 
clockdata.month, clockdata.year,
+               clockdata.hour, clockdata.min, clockdata.sec, tv.Microseconds);
+       LOG("Events remaining in queue:");
+
+       iterator = pblHeapIterator(schedule_list);
+
+       while ((nscb = pblIteratorNext(iterator)) != -1)
+       {
+               Amiga2Date(nscb->tv.Seconds, &clockdata);
+               LOG("nscb: %p, at %d-%d-%d %d:%d:%d.%d, callback: %p, %p",
+                       nscb, clockdata.mday, clockdata.month, clockdata.year, 
clockdata.hour, clockdata.min, clockdata.sec, 
+                       nscb->tv.Microseconds, nscb->callback, nscb->p);
+       };
+
+       pblIteratorFree(iterator);
+}
 
 /**
  * Process signalled event
@@ -237,16 +265,18 @@ static bool ami_scheduler_run(struct nscallback *nscb)
        LOG("Running scheduled callback %p with arg %p", callback, p);
        callback(p);
        LOG("Callback finished...");
+       
+       ami_schedule_dump();
        return true;
 }
 
 static void ami_schedule_open_timer(struct MsgPort *msgport)
 {
 #ifdef __amigaos4__
-       tioreq = (struct TimeRequest *)AllocSysObjectTags(ASOT_IOREQUEST,
-                               ASOIOR_Size,sizeof(struct nscallback),
-                               ASOIOR_ReplyPort,msgport,
-                               ASO_NoTrack,FALSE,
+       tioreq = (struct nscallback *)AllocSysObjectTags(ASOT_IOREQUEST,
+                               ASOIOR_Size, sizeof(struct nscallback),
+                               ASOIOR_ReplyPort, msgport,
+                               ASO_NoTrack, FALSE,
                                TAG_DONE);
 #else
        tioreq = (struct nscallback *)CreateIORequest(msgport, sizeof(struct 
nscallback));
@@ -272,9 +302,6 @@ static void ami_schedule_close_timer(void)
 /* exported interface documented in amiga/schedule.h */
 nserror ami_schedule_create(struct MsgPort *msgport)
 {
-       pool_nscb = ami_misc_itempool_create(sizeof(struct nscallback));
-       if(pool_nscb == NULL) return NSERROR_NOMEM;
-
        ami_schedule_open_timer(msgport);
        schedule_list = pblHeapNew();
        if(schedule_list == PBL_ERROR_OUT_OF_MEMORY) return NSERROR_NOMEM;
@@ -287,13 +314,12 @@ nserror ami_schedule_create(struct MsgPort *msgport)
 /* exported interface documented in amiga/schedule.h */
 void ami_schedule_free(void)
 {
+       ami_schedule_dump();
        schedule_remove_all();
        pblHeapFree(schedule_list); // this should be empty at this point
        schedule_list = NULL;
 
        ami_schedule_close_timer();
-
-       ami_misc_itempool_delete(pool_nscb);
 }
 
 /* exported function documented in amiga/schedule.h */
@@ -312,13 +338,18 @@ nserror ami_schedule(int t, void (*callback)(void *p), 
void *p)
                return ami_schedule_reschedule(nscb, t);
        }
 
-       nscb = ami_misc_itempool_alloc(pool_nscb, sizeof(struct nscallback));
+#ifdef __amigaos4__
+       nscb = AllocSysObjectTags(ASOT_IOREQUEST,
+                                                       ASOIOR_Duplicate, 
tioreq,
+                                                       TAG_DONE);
+#else
+       nscb = (struct nscallback *)CreateIORequest(msgport, sizeof(struct 
nscallback));
+       *nscb = *tioreq;
+#endif
        if(!nscb) return NSERROR_NOMEM;
 
        LOG("new nscb %p", nscb);
 
-       *nscb = *tioreq;
-
        if (ami_schedule_add_timer_event(nscb, t) != NSERROR_OK)
                return NSERROR_NOMEM;
 
@@ -343,6 +374,6 @@ void ami_schedule_handle(struct MsgPort *nsmsgport)
                LOG("timermsg %p", timermsg);
                LOG("timereq err = %d (should be 0)", 
timermsg->timereq.Request.io_Error);
                ami_scheduler_run(timermsg);
-       }
+       };
 }
 


-----------------------------------------------------------------------

Summary of changes:
 frontends/amiga/schedule.c |   65 ++++++++++++++++++++++++++++++++------------
 1 file changed, 48 insertions(+), 17 deletions(-)

diff --git a/frontends/amiga/schedule.c b/frontends/amiga/schedule.c
index 7698129..8abdca5 100644
--- a/frontends/amiga/schedule.c
+++ b/frontends/amiga/schedule.c
@@ -21,6 +21,7 @@
 #include <proto/dos.h>
 #include <proto/exec.h>
 #include <proto/timer.h>
+#include <proto/utility.h> /* For Amiga2Date */
 
 #include <stdio.h>
 #include <stdbool.h>
@@ -46,8 +47,6 @@ struct Device *TimerBase;
 struct TimerIFace *ITimer;
 #endif
 
-static APTR restrict pool_nscb = NULL;
-
 static PblHeap *schedule_list;
 
 /**
@@ -173,7 +172,7 @@ static nserror schedule_remove(void (*callback)(void *p), 
void *p)
        if(nscb != NULL) {
                LOG("deleted callback %p", nscb);
                ami_schedule_remove_timer_event(nscb);
-               ami_misc_itempool_free(pool_nscb, nscb, sizeof(struct 
nscallback));
+               FreeSysObject(ASOT_IOREQUEST, nscb);
                pblHeapConstruct(schedule_list);
        }
 
@@ -193,7 +192,7 @@ static void schedule_remove_all(void)
        {
                ami_schedule_remove_timer_event(nscb);
                pblIteratorRemove(iterator);
-               ami_misc_itempool_free(pool_nscb, nscb, sizeof(struct 
nscallback));
+               FreeSysObject(ASOT_IOREQUEST, nscb);
        };
 
        pblIteratorFree(iterator);
@@ -208,6 +207,35 @@ static int ami_schedule_compare(const void *prev, const 
void *next)
        return CmpTime(&nscb1->tv, &nscb2->tv);
 }
 
+/* Outputs all scheduled events to the log */
+static void ami_schedule_dump(void)
+{
+       PblIterator *iterator;
+       struct nscallback *nscb;
+       struct ClockData clockdata;
+       
+       if(pblHeapIsEmpty(schedule_list)) return;
+
+       struct TimeVal tv;
+       GetSysTime(&tv);
+       Amiga2Date(tv.Seconds, &clockdata);
+       
+       LOG("Current time = %d-%d-%d %d:%d:%d.%d", clockdata.mday, 
clockdata.month, clockdata.year,
+               clockdata.hour, clockdata.min, clockdata.sec, tv.Microseconds);
+       LOG("Events remaining in queue:");
+
+       iterator = pblHeapIterator(schedule_list);
+
+       while ((nscb = pblIteratorNext(iterator)) != -1)
+       {
+               Amiga2Date(nscb->tv.Seconds, &clockdata);
+               LOG("nscb: %p, at %d-%d-%d %d:%d:%d.%d, callback: %p, %p",
+                       nscb, clockdata.mday, clockdata.month, clockdata.year, 
clockdata.hour, clockdata.min, clockdata.sec, 
+                       nscb->tv.Microseconds, nscb->callback, nscb->p);
+       };
+
+       pblIteratorFree(iterator);
+}
 
 /**
  * Process signalled event
@@ -237,16 +265,18 @@ static bool ami_scheduler_run(struct nscallback *nscb)
        LOG("Running scheduled callback %p with arg %p", callback, p);
        callback(p);
        LOG("Callback finished...");
+       
+       ami_schedule_dump();
        return true;
 }
 
 static void ami_schedule_open_timer(struct MsgPort *msgport)
 {
 #ifdef __amigaos4__
-       tioreq = (struct TimeRequest *)AllocSysObjectTags(ASOT_IOREQUEST,
-                               ASOIOR_Size,sizeof(struct nscallback),
-                               ASOIOR_ReplyPort,msgport,
-                               ASO_NoTrack,FALSE,
+       tioreq = (struct nscallback *)AllocSysObjectTags(ASOT_IOREQUEST,
+                               ASOIOR_Size, sizeof(struct nscallback),
+                               ASOIOR_ReplyPort, msgport,
+                               ASO_NoTrack, FALSE,
                                TAG_DONE);
 #else
        tioreq = (struct nscallback *)CreateIORequest(msgport, sizeof(struct 
nscallback));
@@ -272,9 +302,6 @@ static void ami_schedule_close_timer(void)
 /* exported interface documented in amiga/schedule.h */
 nserror ami_schedule_create(struct MsgPort *msgport)
 {
-       pool_nscb = ami_misc_itempool_create(sizeof(struct nscallback));
-       if(pool_nscb == NULL) return NSERROR_NOMEM;
-
        ami_schedule_open_timer(msgport);
        schedule_list = pblHeapNew();
        if(schedule_list == PBL_ERROR_OUT_OF_MEMORY) return NSERROR_NOMEM;
@@ -287,13 +314,12 @@ nserror ami_schedule_create(struct MsgPort *msgport)
 /* exported interface documented in amiga/schedule.h */
 void ami_schedule_free(void)
 {
+       ami_schedule_dump();
        schedule_remove_all();
        pblHeapFree(schedule_list); // this should be empty at this point
        schedule_list = NULL;
 
        ami_schedule_close_timer();
-
-       ami_misc_itempool_delete(pool_nscb);
 }
 
 /* exported function documented in amiga/schedule.h */
@@ -312,13 +338,18 @@ nserror ami_schedule(int t, void (*callback)(void *p), 
void *p)
                return ami_schedule_reschedule(nscb, t);
        }
 
-       nscb = ami_misc_itempool_alloc(pool_nscb, sizeof(struct nscallback));
+#ifdef __amigaos4__
+       nscb = AllocSysObjectTags(ASOT_IOREQUEST,
+                                                       ASOIOR_Duplicate, 
tioreq,
+                                                       TAG_DONE);
+#else
+       nscb = (struct nscallback *)CreateIORequest(msgport, sizeof(struct 
nscallback));
+       *nscb = *tioreq;
+#endif
        if(!nscb) return NSERROR_NOMEM;
 
        LOG("new nscb %p", nscb);
 
-       *nscb = *tioreq;
-
        if (ami_schedule_add_timer_event(nscb, t) != NSERROR_OK)
                return NSERROR_NOMEM;
 
@@ -343,6 +374,6 @@ void ami_schedule_handle(struct MsgPort *nsmsgport)
                LOG("timermsg %p", timermsg);
                LOG("timereq err = %d (should be 0)", 
timermsg->timereq.Request.io_Error);
                ami_scheduler_run(timermsg);
-       }
+       };
 }
 


-- 
NetSurf Browser

_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to