/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1994-2006, Dave Pare, Jeff Bailey, Thomas Ruschak,
- * Ken Stevens, Steve McClure
+ * Copyright (C) 1994-2017, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Ken Stevens, Steve McClure, Markus Armbruster
* Copyright (C) 1991-3 Stephen Crane
*
- * This program is free software; you can redistribute it and/or modify
+ * Empire 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
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* GNU General Public License for more details.
*
* 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* ---
*
* ---
*
* lwpint.h: lwp internal structures
- *
+ *
* Known contributors to this file:
- * Markus Armbruster, 2004-2006
+ * Markus Armbruster, 2004-2009
*/
#ifndef LWPINT_H
#define LWPINT_H
-#ifdef UCONTEXT
+#include <signal.h>
+#include <time.h>
#include <ucontext.h>
-#else /* !UCONTEXT */
-#include <setjmp.h>
-#endif /* !UCONTEXT */
+
+#include "misc.h"
/* process control block. do *not* change the position of context */
struct lwpProc {
-#ifdef UCONTEXT
ucontext_t context; /* context structure */
-#else /* !UCONTEXT */
- jmp_buf context; /* processor context area */
-#endif /* !UCONTEXT */
void *sbtm; /* stack buffer attached to it */
int size; /* size of stack buffer */
char *ustack; /* lowest usable stack address */
void (*entry)(void *); /* entry point */
int dead; /* whether the process can be rescheduled */
int pri; /* which scheduling queue we're on */
- long runtime; /* time at which process is restarted */
+ 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 and description */
- char *desc;
+ char *name; /* process name, for debugging */
int flags;
struct lwpProc *next;
};
struct lwpProc *tail;
};
-/* semaphore */
-struct lwpSem {
- int count;
- struct lwpQueue q;
- char *name;
-};
-
#define LWP_REDZONE 1024 /* make this a multiple of 1024 */
-/* XXX Note that this assumes sizeof(long) == 4 */
-#define LWP_CHECKMARK 0x5a5a5a5aL
-
-extern int LwpStackGrowsDown;
+/* XXX Note that this assumes sizeof(int) == 4 */
+#define LWP_CHECKMARK 0x5a5a5a5a
-int lwpNewContext(struct lwpProc *, int);
+int lwpNewContext(struct lwpProc *);
void lwpSwitchContext(struct lwpProc *, struct lwpProc *);
void lwpAddTail(struct lwpQueue *, struct lwpProc *);
struct lwpProc *lwpGetFirst(struct lwpQueue *);
void lwpReschedule(void);
void lwpEntryPoint(void);
void lwpInitSelect(struct lwpProc *);
+void lwpWakeupSleep(void);
void lwpSelect(void *);
void lwpInitSigWait(sigset_t *);
void lwpSigWakeup(void);