]> git.pond.sub.org Git - empserver/blobdiff - src/lib/lwp/lwpint.h
Update known contributors comments
[empserver] / src / lib / lwp / lwpint.h
index 53fc15359c226d29bd662ed9ab1901b05834d4e7..5ccd90ed87b806b8ec54e79cefba9f57c36cb82b 100644 (file)
 /*
- * lwpint.h -- lwp internal structures
+ *  Empire - A multi-player, client/server Internet based war game.
+ *  Copyright (C) 1994-2009, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *                           Ken Stevens, Steve McClure
+ *  Copyright (C) 1991-3 Stephen Crane
  *
- * Copyright (C) 1991-3 Stephen Crane.
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
  *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- * 
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
  *
- * author: Stephen Crane, (jsc@doc.ic.ac.uk), Department of Computing,
- * Imperial College of Science, Technology and Medicine, 180 Queen's
- * Gate, London SW7 2BZ, England.
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  ---
+ *
+ *  See files README, COPYING and CREDITS in the root of the source
+ *  tree for related information and legal notices.  It is expected
+ *  that future projects/authors will amend these files as needed.
+ *
+ *  ---
+ *
+ *  lwpint.h: lwp internal structures
+ *
+ *  Known contributors to this file:
+ *     Markus Armbruster, 2004-2009
  */
-#ifndef _LWPINT_H
-#define _LWPINT_H
 
-/* `liveness' counter: check signals every `n' visits to the scheduler */
-/* note: the lower this value, the more responsive the system but the */
-/* more inefficient the context switch time */
-#define LCOUNT -1
+#ifndef LWPINT_H
+#define LWPINT_H
 
-#ifdef hpux
-int lwpSave _PROTO((jmp_buf));
-void lwpRestore _PROTO((jmp_buf));
-#endif
+#include <signal.h>
+#include <time.h>
+#include <ucontext.h>
 
-#if defined(MIPS) || defined(AIX32) || defined(ALPHA) || defined(__vax)
-int lwpSave _PROTO((jmp_buf));
-void lwpRestore _PROTO((jmp_buf));
-#elif defined(SUN4)
-#define        lwpSave(x)      _setjmp(x)
-#define lwpRestore(x)  _longjmp(x, 1)
-#elif defined (UCONTEXT)
-#define lwpSave(x)    getcontext(&(x))
-#define lwpRestore(x) setcontext(&(x))
-#else
-#ifdef hpc
-#define        lwpSave(x)      setjmp(x)
-#define lwpRestore(x)  longjmp(x, 1)
-#else
-#ifndef hpux
-#define        lwpSave(x)      setjmp(x)
-#define lwpRestore(x)  longjmp(x, 1)
-#endif /* hpux */
-#endif /* hpc */
-#endif
+#include "misc.h"
 
-#ifdef AIX32
-/* AIX needs 12 extra bytes above the stack; we add it here */
-#define        LWP_EXTRASTACK  3*sizeof(long)
-#else
-#define LWP_EXTRASTACK 0
-#endif
+/* process control block.  do *not* change the position of context */
+struct lwpProc {
+    ucontext_t context;                /* context structure */
+    void *sbtm;                        /* stack buffer attached to it */
+    int size;                  /* size of stack buffer */
+    char *ustack;              /* lowest usable stack address */
+    int usize;                 /* size of usable stack */
+    void (*entry)(void *);     /* entry point */
+    int dead;                  /* whether the process can be rescheduled */
+    int pri;                   /* which scheduling queue we're on */
+    time_t runtime;            /* time at which process is restarted */
+    int fd;                    /* fd we're blocking on */
+    int fd_ready;              /* woken up because fd was ready */
+    int argc;                  /* initial arguments */
+    char **argv;
+    void *ud;                  /* user data */
+    char *name;                        /* process name, for debugging */
+    int flags;
+    struct lwpProc *next;
+};
+
+/* queue */
+struct lwpQueue {
+    struct lwpProc *head;
+    struct lwpProc *tail;
+};
 
 #define LWP_REDZONE    1024    /* make this a multiple of 1024 */
 
-/* XXX Note that this assumes sizeof(long) == 4 */
-#define LWP_CHECKMARK  0x5a5a5a5aL
+/* XXX Note that this assumes sizeof(int) == 4 */
+#define LWP_CHECKMARK  0x5a5a5a5a
 
-#define SIGNALS        sigmask(SIGALRM)
+int lwpNewContext(struct lwpProc *);
+void lwpSwitchContext(struct lwpProc *, struct lwpProc *);
+void lwpAddTail(struct lwpQueue *, struct lwpProc *);
+struct lwpProc *lwpGetFirst(struct lwpQueue *);
+void lwpReady(struct lwpProc *);
+void lwpReschedule(void);
+void lwpEntryPoint(void);
+void lwpInitSelect(struct lwpProc *);
+void lwpWakeupSleep(void);
+void lwpSelect(void *);
+void lwpInitSigWait(sigset_t *);
+void lwpSigWakeup(void);
+void lwpStatus(struct lwpProc *, char *, ...)
+    ATTRIBUTE((format (printf, 2, 3)));
 
-#ifndef hpux
-typedef double stkalign_t;
-#else
-typedef struct {
-    char x[64];
-} stkalign_t;
 #endif
-
-/* internal routines */
-void lwpAddTail _PROTO((struct lwpQueue *, struct lwpProc *));
-struct lwpProc *lwpGetFirst _PROTO((struct lwpQueue *));
-void lwpReschedule _PROTO((void));
-void lwpReady _PROTO((struct lwpProc *));
-void lwpOnalarm _PROTO((void));
-
-#ifdef UCONTEXT
-void lwpInitContext _PROTO((struct lwpProc *, stack_t *));
-#else  /* GETCONTEXT */
-#ifdef hpc
-void lwpInitContext _PROTO((struct lwpProc *, void *));
-#else
-#ifdef hpux
-void lwpInitContext _PROTO((volatile struct lwpProc * volatile, void *));
-#else
-void lwpInitContext _PROTO((struct lwpProc *, void *));
-#endif /* hpux */
-#endif /* hpc */
-#endif /* GETCONTEXT */
-void lwpEntryPoint _PROTO((void));
-void lwpInitSelect _PROTO((struct lwpProc * self));
-void lwpDestroy _PROTO((struct lwpProc * proc));
-
-#endif /* _LWP_H */