124 lines · 1.9 KB · C
RawDownload
#include "threadimpl.h"#include <signal.h> typedef struct Mainarg Mainarg;struct Mainarg{	int	argc;	char	**argv;}; int	mainstacksize;int	_threadnotefd;int	_threadpasserpid;static void mainlauncher(void*);extern void (*_sysfatal)(char*, va_list); void_threaddie(int x){	extern char *_threadexitsallstatus;	USED(x); 	if(_threadexitsallstatus)		exit(_threadexitsallstatus[0] ? 1 : 0);} intmain(int argc, char **argv){	Mainarg *a;	Proc *p; 	signal(SIGTERM, _threaddie);//	rfork(RFREND); //_threaddebuglevel = (DBGSCHED|DBGCHAN|DBGREND)^~0;	_systhreadinit();	_qlockinit(_threadrendezvous);	_sysfatal = _threadsysfatal;//	notify(_threadnote);	if(mainstacksize == 0)		mainstacksize = 32*1024; 	a = _threadmalloc(sizeof *a, 1);	a->argc = argc;	a->argv = argv; 	p = _newproc(mainlauncher, a, mainstacksize, "threadmain", 0, 0);	_schedinit(p);	abort();	/* not reached */	return 0;} static voidmainlauncher(void *arg){	Mainarg *a; 	a = arg;	threadmain(a->argc, a->argv);	threadexits("threadmain");} void_threadsignal(void){} void_threadsignalpasser(void){} int_schedfork(Proc *p){	return ffork(RFMEM|RFNOWAIT, _schedinit, p);} void_schedexit(Proc *p){	char ex[ERRMAX];	Proc **l; 	lock(&_threadpq.lock);	for(l=&_threadpq.head; *l; l=&(*l)->next){		if(*l == p){			*l = p->next;			if(*l == nil)				_threadpq.tail = l;			break;		}	}	unlock(&_threadpq.lock); 	strncpy(ex, p->exitstr, sizeof ex);	ex[sizeof ex-1] = '\0';	free(p);	_exit(ex[0]);} intnrand(int n){	return random()%n;} void_systhreadinit(void){} voidthreadstats(void){	extern int _threadnrendez, _threadhighnrendez,		_threadnalt, _threadhighnentry;	fprint(2, "*** THREAD LIBRARY STATS ***\n");	fprint(2, "nrendez %d high simultaneous %d\n", 		_threadnrendez, _threadhighnrendez);	fprint(2, "nalt %d high simultaneous entry %d\n",		_threadnalt, _threadhighnentry);}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t