BSD 4_3_Net_2 release
[unix-history] / usr / src / usr.sbin / amd / amd / clock.c
index 1b9d786..171dd4a 100644 (file)
@@ -1,6 +1,4 @@
 /*
 /*
- * $Id: clock.c,v 5.2 90/06/23 22:19:21 jsp Rel $
- *
  * Copyright (c) 1989 Jan-Simon Pendry
  * Copyright (c) 1989 Imperial College of Science, Technology & Medicine
  * Copyright (c) 1989 The Regents of the University of California.
  * Copyright (c) 1989 Jan-Simon Pendry
  * Copyright (c) 1989 Imperial College of Science, Technology & Medicine
  * Copyright (c) 1989 The Regents of the University of California.
@@ -9,21 +7,38 @@
  * This code is derived from software contributed to Berkeley by
  * Jan-Simon Pendry at Imperial College, London.
  *
  * This code is derived from software contributed to Berkeley by
  * Jan-Simon Pendry at Imperial College, London.
  *
- * Redistribution and use in source and binary forms are permitted provided
- * that: (1) source distributions retain this entire copyright notice and
- * comment, and (2) distributions including binaries display the following
- * acknowledgement:  ``This product includes software developed by the
- * University of California, Berkeley and its contributors'' in the
- * documentation or other materials provided with the distribution and in
- * all advertising materials mentioning features or use of this software.
- * Neither the name of the University nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)clock.c     5.3 (Berkeley) 5/12/91
+ *
+ * $Id: clock.c,v 5.2.1.5 91/05/07 22:17:49 jsp Alpha $
  *
  *
- *     @(#)clock.c     5.1 (Berkeley) 6/29/90
  */
 
 /*
  */
 
 /*
@@ -33,8 +48,8 @@
  * See usual references.
  *
  * Use of a heap-based mechanism was rejected:
  * See usual references.
  *
  * Use of a heap-based mechanism was rejected:
- * 1.  more complext implementation needed.
- * 2.  not obvious that a list is too slow for amd.
+ * 1.  more complex implementation needed.
+ * 2.  not obvious that a list is too slow for Amd.
  */
 
 #include "am.h"
  */
 
 #include "am.h"
@@ -60,11 +75,12 @@ time_t next_softclock;                      /* Time of next call to softclock() */
 #define        CALLOUT_FREE_SLOP       10
 
 /*
 #define        CALLOUT_FREE_SLOP       10
 
 /*
- * Assumption: valid id's are non-zero.
+ * Global assumption: valid id's are non-zero.
  */
 #define        CID_ALLOC()     (++callout_id)
 #define        CID_UNDEF       (0)
 
  */
 #define        CID_ALLOC()     (++callout_id)
 #define        CID_UNDEF       (0)
 
+static callout *alloc_callout(P_void);
 static callout *alloc_callout()
 {
        callout *cp = free_callouts;
 static callout *alloc_callout()
 {
        callout *cp = free_callouts;
@@ -76,6 +92,7 @@ static callout *alloc_callout()
        return ALLOC(callout);
 }
 
        return ALLOC(callout);
 }
 
+static void free_callout P((callout *cp));
 static void free_callout(cp)
 callout *cp;
 {
 static void free_callout(cp)
 callout *cp;
 {
@@ -93,6 +110,7 @@ callout *cp;
  *
  * (*fn)(closure) will be called at clocktime() + secs
  */
  *
  * (*fn)(closure) will be called at clocktime() + secs
  */
+int timeout P((unsigned int secs, void (*fn)(), voidp closure));
 int timeout(secs, fn, closure)
 unsigned int secs;
 void (*fn)();
 int timeout(secs, fn, closure)
 unsigned int secs;
 void (*fn)();
@@ -135,6 +153,7 @@ voidp closure;
 /*
  * De-schedule a callout
  */
 /*
  * De-schedule a callout
  */
+void untimeout P((int id));
 void untimeout(id)
 int id;
 {
 void untimeout(id)
 int id;
 {
@@ -148,9 +167,32 @@ int id;
        }
 }
 
        }
 }
 
+/*
+ * Reschedule after clock changed
+ */
+void reschedule_timeouts P((time_t now, time_t then));
+void reschedule_timeouts(now, then)
+time_t now;
+time_t then;
+{
+       callout *cp;
+
+       for (cp = callouts.c_next; cp; cp = cp->c_next) {
+               if (cp->c_time >= now && cp->c_time <= then) {
+                       plog(XLOG_WARNING, "job %d rescheduled to run immediately", cp->c_id);
+#ifdef DEBUG
+                       dlog("rescheduling job %d back %d seconds",
+                               cp->c_id, cp->c_time - now);
+#endif
+                       next_softclock = cp->c_time = now;
+               }
+       }
+}
+
 /*
  * Clock handler
  */
 /*
  * Clock handler
  */
+int softclock(P_void);
 int softclock()
 {
        time_t now;
 int softclock()
 {
        time_t now;
@@ -158,7 +200,7 @@ int softclock()
 
        do {
                if (task_notify_todo)
 
        do {
                if (task_notify_todo)
-                       task_notify();
+                       do_task_notify();
 
                now = clocktime();
 
 
                now = clocktime();