ftp.nice.ch/Attic/openStep/developer/bundles/GDBbundle.1.0.s.tgz#/GDBbundle-1.0.s/debug/gdb/gdb/next/cthread_internals.h

This is cthread_internals.h in view mode; [Download] [Up]

/* 
 * Mach Operating System
 * Copyright (c) 1989 Carnegie-Mellon University
 * All rights reserved.  The CMU software License Agreement specifies
 * the terms and conditions for use and redistribution.
 */
/*
 * HISTORY
 * 08-Mar-90  Avadis Tevanian, Jr. (avie) at NeXT
 *	Added errno field to cproc structure.
 *
 * $Log:	cthread_internals.h,v $
 * Revision 1.5  89/06/21  13:03:01  mbj
 * 	Removed the old (! IPC_WAIT) form of condition waiting/signalling.
 * 
 * Revision 1.4  89/05/19  13:02:58  mbj
 * 	Add cproc flags.
 * 
 * Revision 1.3  89/05/05  18:48:17  mrt
 * 	Cleanup for Mach 2.5
 * 
 * 24-Mar-89  Michael Jones (mbj) at Carnegie-Mellon University
 *	Implement fork() for multi-threaded programs.
 *	Made MTASK version work correctly again.
 */
/*
 * cthread_internals.h - by Eric Cooper
 *
 * Private definitions for the C Threads implementation.
 *
 * The cproc structure is used for different implementations
 * of the basic schedulable units that execute cthreads.
 *
 * The cproc implementation is determined by defining exactly
 * one of the following options:
 *
 *	MTHREAD		MACH threads; single address space,
 *			kernel-mode preemptive scheduling
 *
 *	COROUTINE	coroutines; single address space,
 *			user-mode non-preemptive scheduling
 *
 *	MTASK		MACH tasks; multiple address spaces,
 *			shared memory for global data,
 *			kernel-mode preemptive scheduling
 */


#include "options.h"

/*
 * Low-level thread implementation.
 * This structure must agree with struct ur_cthread in cthreads.h
 */
typedef struct cproc {
	struct cproc *next;		/* for lock, condition, and ready queues */
	cthread_t incarnation;		/* for cthread_self() */
	int state;
	port_t reply_port;		/* for mig_get_reply_port() */

#if	COROUTINE
	int context;
#endif	COROUTINE

#if	MTHREAD
	port_t wait_port;
#endif	MTHREAD

#if	MTHREAD || MTASK
	int thread_id;
#endif	MTHREAD || MTASK
	struct cproc *link;		/* for finding cproc_self() when MTASK;
					   also so all cprocs can be found
					   after a fork() */
#if	MTHREAD || COROUTINE
	int flags;
#endif	MTHREAD || COROUTINE

	unsigned int stack_base;
	unsigned int stack_size;
#if	NeXT
	int	error;
#endif	NeXT

} *cproc_t;

#define	NO_CPROC		((cproc_t) 0)
#define	cproc_self()		((cproc_t) ur_cthread_self())

/*
 * Possible cproc states.
 */
#define	CPROC_RUNNING		0
#define	CPROC_SPINNING		1
#define	CPROC_BLOCKED		2

#if	MTHREAD || COROUTINE
/*
 * The cproc flag bits.
 */
#define CPROC_INITIAL_STACK	0x1

#endif	MTHREAD || COROUTINE

/*
 * C Threads imports:
 */
#ifdef __STRICT_BSD__
extern char *malloc();
#endif __STRICT_BSD__

/*
 * C library imports:
 */
#ifdef __STRICT_BSD__
extern exit();
#else
#include <stdlib.h>
#endif __STRICT_BSD__

/*
 * Macro for MACH kernel calls.
 */
#define	MACH_CALL(expr, ret)	if (((ret) = (expr)) != KERN_SUCCESS) { \
					mach_error("expr", (ret)); \
					ASSERT(SHOULDNT_HAPPEN); \
					exit(1); \
				} else

/*
 * Debugging support.
 */
#ifdef	DEBUG

#define	private
#define	TRACE(x)	if (cthread_debug) x ; else
extern int cthread_debug;

/*
 * C library imports:
 */
extern printf(), fprintf(), abort();

#else	DEBUG

#define	private static
#define	TRACE(x)

#endif	DEBUG

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.