# 1 "signal.c"
 



























 



 










# 1 "signal_internals.h" 1
 






























# 1 "../include/pthread/config.h" 1
 


























 



























































# 32 "signal_internals.h" 2

# 1 "../include/../src/config_internals.h" 1
 


























 




















































# 33 "signal_internals.h" 2





# 1 "../include/pthread/signal.h" 1
 











































# 1 "../include/pthread/stdtypes.h" 1
 






























# 78 "../include/pthread/stdtypes.h"

# 1 "/usr/include/sys/types.h" 1 3



#pragma comment(exestr, "@(#) types.h 26.3 95/11/30 ")



 









 
 

 
 
 

 
 

 
 


#pragma pack(4)














typedef	long		daddr_t;	 




typedef	char *		caddr_t;	 





typedef	struct { int r[1]; } *physadr;


 




typedef	unsigned char	unchar;




typedef	unsigned char	u_char;




typedef	unsigned short	ushort;




typedef	unsigned short	u_short;




typedef	unsigned int	uint;




typedef	unsigned int	u_int;




typedef	unsigned long	ulong;




typedef	unsigned long	u_long;








typedef	unsigned char	uchar_t;




typedef	unsigned short	ushort_t;




typedef	unsigned int	uint_t;




typedef	unsigned long	ulong_t;




typedef	unsigned long	ino32_t;		 
typedef	unsigned short	ino16_t;		 


typedef	unsigned long	ino_t;









typedef	short		cnt_t;		 







typedef	long		time_t;		 







typedef	struct __label { int __val[6]; } label_t;  





typedef	unsigned short	mode_t;




typedef	short		nlink_t;





typedef	long		id_t;




typedef unsigned int	useconds_t;









typedef	short		dev_t;		 




typedef	long		off_t;		 




typedef	unsigned long	paddr_t;	 




typedef	unsigned short	mloc_t;		 




typedef	long		key_t;		 




typedef	unsigned 	pfn_t;




typedef	unsigned short	use_t;		 









typedef	char *		faddr_t;













struct saddr {
	unsigned short	sa_seg;
	long		sa_off;
};





typedef	short		sysid_t;




typedef	short		index_t;




typedef	short		lock_t;		 




typedef	unsigned int	size_t;		 




typedef	int		ssize_t;	 




typedef	ushort_t	sel_t;		 


 


typedef	long		clock_t;	 




typedef	int		ptrdiff_t;	 




typedef	long		fpos_t;		 




typedef	int		sig_atomic_t;	 





typedef	struct {
	int	quot;
	int	rem;
} div_t;




typedef	struct {
	long	quot;
	long	rem;
} ldiv_t;






typedef	unsigned short	uid_t;




typedef	unsigned short	gid_t;




typedef	short		pid_t;		 



# 1 "/usr/include/sys/fdmac.h" 1 3



#pragma comment(exestr, "@(#) fdmac.h 26.1 95/11/30 ")



 



















 


















typedef long		fd_mask;


























typedef	struct fd_set {
	fd_mask	fds_bits[((( 150  )+((  (sizeof(fd_mask) * 8 )  )-1))/(  (sizeof(fd_mask) * 8 )  )) ];
} fd_set;



# 90 "/usr/include/sys/fdmac.h" 3








# 339 "/usr/include/sys/types.h" 2 3



							 


typedef	unsigned long	mask_t;		 




typedef	mask_t		priv_t;		 

							 


typedef	enum _boolean { B_FALSE, B_TRUE } boolean_t;
 










 



typedef	long		hostid_t;

 








#pragma pack()

# 79 "../include/pthread/stdtypes.h" 2




# 45 "../include/pthread/signal.h" 2









# 1 "/usr/include/sys/signal.h" 1 3



#pragma comment(exestr, "@(#) signal.h 62.2 97/03/17 ")







 









 
 

 
 
 
































# 1 "/usr/include/sys/siginfo.h" 1 3



#pragma comment(exestr, "@(#) siginfo.h 26.2 95/11/30 ")



 











#pragma pack(4)




 

 









 









 



 




 



 







 











typedef	struct	

	siginfo

		{

	int	si_signo;			 
	int	si_code;			 
	int	si_errno;			 

	union {
		int	_pad[((128  / sizeof(int)) - 3) ];		 

		struct {			 
			pid_t	_pid;		 
			union {
				struct {
					uid_t	_uid;
				} _kill;
				struct {
					clock_t	_utime;
					int	_status;
					clock_t	_stime;
				} _cld;
			} _pdata;
		} _proc;

		struct {	 



			caddr_t	_addr;		 

		} _fault;

		struct {			 
			int	_fd;		 
			long	_band;
		} _sifile;

	} _data;
} siginfo_t;


typedef	struct	k_siginfo {

	int	si_signo;			 
	int	si_code;			 
	int	si_errno;			 

	union {
		struct {			 
			pid_t	_pid;		 
			union {
				struct {
					uid_t	_uid;
				} _kill;
				struct {
					clock_t	_utime;
					int	_status;
					clock_t	_stime;
				} _cld;
			} _pdata;
		} _proc;

		struct {	 
			caddr_t	_addr;		 
		} _fault;

		struct {			 
			int	_fd;		 
			long	_band;
		} _sifile;

	} _data;
} k_siginfo_t;

typedef	struct	sigqueue {
	struct	sigqueue	*sq_next;
	struct	k_siginfo	sq_info;
} sigqueue_t;












# 199 "/usr/include/sys/siginfo.h" 3


#pragma pack()

# 60 "/usr/include/sys/signal.h" 2 3




#pragma pack(4)
























































			 
			 
			 









# 142 "/usr/include/sys/signal.h" 3





typedef	long	sigset_t;



# 163 "/usr/include/sys/signal.h" 3



 





struct	sigaction {
	union{

		void	(*_sa_handler)(int);	 
		void	(*_sa_sigaction)(int, siginfo_t *, void *);	 




	} _sa_function;
	sigset_t sa_mask;		 
	int	sa_flags;		 
};



# 200 "/usr/include/sys/signal.h" 3


 





 











typedef struct

	sigaltstack 


		{
		void    *ss_sp;		 
		size_t	ss_size;	 
		int	ss_flags;	 
} stack_t;




 






struct sigstack {
	int     ss_onstack;
	void    *ss_sp;
};











# 277 "/usr/include/sys/signal.h" 3


















# 323 "/usr/include/sys/signal.h" 3



 






union sigval {
	int	sival_int;
	void * 	sival_ptr;
};


 




struct sigevent {
	int		sigev_notify;
	int		sigev_signo;
	union sigval 	sigev_value;	
	void 		(*sigev_handler)();
};


 














#pragma pack()

# 54 "../include/pthread/signal.h" 2


# 66 "../include/pthread/signal.h"


# 82 "../include/pthread/signal.h"






















struct timespec {
  time_t tv_sec;
  long   tv_nsec;
};
















union p_sigval {
  int sigval_int;
  void *sigval_ptr;
};

struct p_siginfo {
  int si_signo;
  int si_code;
  union p_sigval si_value;
};

 








# 175 "../include/pthread/signal.h"









# 226 "../include/pthread/signal.h"


# 1 "/usr/include/sys/user.h" 1 3



#pragma comment(exestr, "@(#) user.h 61.1 97/02/24 ")



 









 






 
 

 
 
 

 
 

 
 
 



 
























# 1 "/usr/include/sys/regset.h" 1 3



#pragma comment(exestr, "@(#) regset.h 26.1 95/11/30 ")



 











#pragma pack(4)





union u_fps {
	struct  fpstate          
	{
		int     state[27]; 
		int     status;    
	} u_fpstate;
	struct	fp_emul
	{
		char	fp_emul[246];   
		char	fp_epad[2];
	} fp_emul;
};
# 51 "/usr/include/sys/regset.h" 3


 





#pragma pack()

# 66 "/usr/include/sys/user.h" 2 3



#pragma pack(4)







 
 
				 


				 





typedef	struct	user
{
	char	u_stack[3712 ];	 
		 

	char    u_fpvalid;          	 
	char	u_vtrunc;
	char	u_fpfill[2];

	union u_fps	u_fps;

	long    u_weitek_reg[33  ];  
					 
					 
					 
					 

	struct tss386 *u_tss;	 
	ushort	u_sztss;	 

	char	u_sigfault;	 


	char	u_usigfailed;	 





	ulong	u_sub;		 



	char	u_filler1[40];	 





	
	int	u_caddrflt;	 
				 
				 
				 

	char	u_nshmseg;	 
				 
				 

	unchar	u_exdvr_callouts;	 




 	struct rem_ids {		 
 		ushort	ux_uid;		 
 		ushort	ux_gid;		 
 		ushort	ux_mode;	 
 	} u_exfile;

	char	*u_comp;	 
	char	*u_nextcp;	 
	ushort 	u_rflags;	 
	short	u_escbugaddr1;
	int	u_sysabort;	 
	int	u_systrap;	  
	int 	u_syscall;	 
	int	u_mntindx;	 
	int	*u_euserp;	 
	long 	u_rcstat; 	 
	ulong	u_userstack;
	struct inode	*u_copyip;	 
	struct buf	*u_copybp;	 
	long 		 u_kflags;	 
	long	u_bsize;		 
	char 	u_psargs[80 ];	 	

	int	u_pgproc;	 
	time_t	u_ageinterval;	 
	label_t	u_qsav;		 
				 

	char	u_segflg;	 
				 

	unchar	u_error;	 

	ushort	u_uid;		 
	ushort	u_gid;		 
	ushort	u_ruid;		 
	ushort	u_rgid;		 

	ushort	u_nofiles;	 

	struct proc *u_procp;	 

	int	*u_ap;		 

	union {			 
		struct	{
			int	r_val1;
			int	r_val2;
		}r_reg;
		off_t	r_off;
		time_t	r_time;
	} u_r;

	caddr_t	u_base;		 
	unsigned u_count;	 
	off_t	u_offset;	 
	short	u_fmode;	 
	ushort	u_pbsize;	 
	ushort	u_pboff;	 
	dev_t	u_pbdev;	 
	daddr_t	u_rablock;	 
	short	u_errcnt;	 
	short	u_escbugaddr2;

	struct inode *u_cdir;	 

	struct inode *u_rdir;	 
	caddr_t	u_dirp;		 
	struct {
		ino16_t	d_ino;
		char	d_name[14 ];
	}	u_dent;		 
	struct inode *u_pdir;	 
				 

	char	*u_pofile;	 

	struct inode *u_ttyip;	 

	int	u_arg[6];	 

	unsigned u_tsize;	 
	unsigned u_dsize;	 
	unsigned u_ssize;	 

	void (*u_signal[32 ])();	 
	void (*u_sigreturn)();		 

	time_t	u_utime;	 
	time_t	u_stime;	 
	time_t	u_cutime;	 
	time_t	u_cstime;	 

	int	*u_ar0;		 

 



	struct {			 
		short	*pr_base;	 
		unsigned pr_size;	 
		unsigned pr_off;	 
		unsigned pr_scale;	 
	} u_prof;

	short  *u_ttyp;			 
	dev_t	u_ttyd;			 

	ulong	u_renv;			 
					 
					 
					 
					 
	 


	struct exdata {
			struct    inode  *ip;
			long      ux_tsize;	 
			long      ux_dsize;	 
			long      ux_bsize;	 
			long      ux_lsize;  	 
			long      ux_nshlibs; 	 
			short     ux_mag;   	 
			long      ux_toffset;	 
			long      ux_doffset;	 
			long      ux_loffset;	 
			long      ux_txtorg;	 
			long      ux_datorg;	 
			long      ux_entloc;	 
			ulong	  ux_renv;	 
	} u_exdata;

	long   u_execsz;

	char	u_comm[14 ];

	time_t	u_start;
	time_t	u_ticks;
	long	u_mem;
	long	u_ior;
	long	u_iow;
	long	u_iosw;
	long	u_ioch;
	char	u_acflag;

	short	u_cmask;		 
	daddr_t	u_limit;		 

	short	u_lock;			 

	char	u_selstat;		 

	 
	char    u_weitek;                
	int     u_fpintgate[2];          




	 
	int    *u_callgatep;             
	int     u_callgate[2];           
	uint	u_ldtmodified;           
	ushort	u_ldtlimit;		 

	 
	 
	char    u_debugpend;             

	 
	char    u_debugon;               
	int     u_debugreg[8];
	long	u_entrymask[4 ];  
	long	u_exitmask[4 ];	 
 


	sigset_t	u_sigmask[32 ];       
	sigset_t	u_oldmask;	 
	gid_t	*u_groups;		 
					 

	daddr_t	u_behind;		 
	daddr_t u_ahead;		 
	daddr_t u_nxtstrt;		 
	daddr_t u_nxtend;		 

	long		u_iovtot;	 

	struct file	*u_ofile[1];	 
					 
					 
	 
} user_t;
#pragma pack()

# 356 "/usr/include/sys/user.h" 3













 





 



 







							 
	 






							 

 






 



 


 











 





 






 







					 

					 

					 

				 


				 

				 

				 

				 



				 



#pragma pack(4)




struct user_save {
        struct proc *u_procp;    
        caddr_t u_base;          
        unsigned u_count;        
        off_t   u_offset;        
        char    u_segflg;
	unchar	u_error;	 
};                                                            
#pragma pack()


# 228 "../include/pthread/signal.h" 2

# 1 "/usr/include/ucontext.h" 1 3
 









 











 
 
 

 
 
 
 




#pragma comment(exestr, "xpg4plus @(#) ucontext.h 20.1 94/12/04 ")

# 1 "/usr/include/sys/ucontext.h" 1 3



#pragma comment(exestr, "@(#) ucontext.h 26.1 95/11/30 ")



 










# 1 "/usr/include/sys/reg.h" 1 3



#pragma comment(exestr, "@(#) reg.h 26.2 96/02/28 ")



 









 
 

 
 
 

 

 
































# 73 "/usr/include/sys/reg.h" 3





# 19 "/usr/include/sys/ucontext.h" 2 3

# 38 "/usr/include/sys/ucontext.h" 3



#pragma pack(4)




typedef struct 

mcontext 

	{





	int		regs[(18 +1) ];		 
	union	u_fps	fp;			 
	long		weitek[33  ];	 

} mcontext_t;
 



typedef struct 

ucontext 

	{
	unsigned long	 uc_flags;
	struct ucontext	*uc_link;		 
	sigset_t	 uc_sigmask;		 
	long		 uc_maskfill[3];	 
	stack_t		 uc_stack;		 
	mcontext_t	 uc_mcontext;		 
	long		 uc_filler[5];		 
} ucontext_t;





 














typedef long    greg_t;










# 129 "/usr/include/sys/ucontext.h" 3


#pragma pack()

# 37 "/usr/include/ucontext.h" 2 3







extern int getcontext(ucontext_t *);
extern int setcontext(const ucontext_t *);
extern int swapcontext(ucontext_t *, const ucontext_t *);
extern void makecontext(ucontext_t *, void(*)(), int, ...);








# 229 "../include/pthread/signal.h" 2













# 331 "../include/pthread/signal.h"

# 352 "../include/pthread/signal.h"































# 38 "signal_internals.h" 2

























 



# 77 "signal_internals.h"


# 89 "signal_internals.h"
















 



# 119 "signal_internals.h"


# 131 "signal_internals.h"































# 182 "signal_internals.h"



















 














# 233 "signal_internals.h"




 


















# 281 "signal_internals.h"


# 315 "signal_internals.h"




















# 354 "signal_internals.h"






# 44 "signal.c" 2

# 1 "internals.h" 1
 






























# 1 "../include/pthread/config.h" 1
 


























 



























































# 32 "internals.h" 2

# 1 "../include/../src/config_internals.h" 1
 


























 




















































# 33 "internals.h" 2


 



 





















  typedef void* malloc_t;







# 1 "../include/pthread.h" 1
 






























 





# 1 "../include/pthread/config.h" 1
 


























 



























































# 38 "../include/pthread.h" 2

# 47 "../include/pthread.h"

# 1 "../include/pthread/unistd.h" 1
 






























# 42 "../include/pthread/unistd.h"


# 1 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/unistd.h" 1 3
 


# 14 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/unistd.h" 3

 











 
 
 

 
 
 
 




#pragma comment(exestr, "xpg4plus @(#) unistd.h 20.5 95/09/27 ")






# 1 "/usr/include/sys/unistd.h" 1 3



#pragma comment(exestr, "@(#) unistd.h 26.1 95/11/30 ")



 









 
 

 
 
 

 

 



  
 












 





 




 

























 





 






 





















 












 













 



























 










 





 
























 
 
 









# 46 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/unistd.h" 2 3






















extern int	access(const char *, int);
extern unsigned	alarm(unsigned);
extern int	chdir(const char *);
extern int	chown(const char *, uid_t, gid_t);
extern int	close(int);
extern char	*cuserid(char *);
extern int	dup(int);
extern int	dup2(int, int);
extern int	execl(const char *, const char *, ...);
extern int	execle(const char *, const char *, ...);
extern int	execlp(const char *, const char *, ...);
extern int	execv(const char *, char *const *);
extern int	execve(const char *, char *const *, char *const *);
extern int	execvp(const char *, char *const *);
extern void	_exit(int);
extern pid_t	fork(void);
extern long	fpathconf(int, int);
extern char	*getcwd(char *, size_t);
extern gid_t	getegid(void);
extern uid_t	geteuid(void);
extern gid_t	getgid(void);
extern int	getgroups(int, gid_t *);
extern char	*getlogin(void);
extern pid_t	getpgrp(void);
extern pid_t	getpid(void);
extern pid_t	getppid(void);
extern uid_t	getuid(void);
extern int	isatty(int);
extern int	link(const char *, const char *);
extern off_t	lseek(int, off_t, int);
extern long	pathconf(const char *, int);
extern int	pause(void);
extern int	pipe(int *);
extern ssize_t	read(int, void *, size_t);
extern int	rmdir(const char *);
extern int	setgid(gid_t);
extern int	setpgid(pid_t, pid_t);
extern pid_t	setsid(void);
extern int	setuid(uid_t);
extern unsigned	sleep(unsigned);
extern long	sysconf(int);
extern pid_t	tcgetpgrp(int);
extern int	tcsetpgrp(int, pid_t);
extern char	*ttyname(int);
extern int	unlink(const char *);
extern ssize_t	write(int, const void *, size_t);


extern size_t	confstr(int, char *, size_t);
extern int	getopt(int, char *const*, const char *);
extern char	*optarg;
extern int	optind, opterr, optopt;



extern int	chroot(const char *);
extern char	*crypt(const char *, const char *);
extern char	*ctermid(char *);	 
extern void	encrypt(char *, int);
extern int	fsync(int);
extern char	*getpass(const char *);
extern int	nice(int);
extern void	swab(const void *, void *, ssize_t);



extern int	brk(void *);
extern int	fchdir(int);
extern int	fchown(int, uid_t, gid_t);
extern int	ftruncate(int, off_t);
extern int	getdtablesize(void);
extern long	gethostid(void);
extern int	gethostname(char *, int);
extern int	getpagesize(void);
extern pid_t	getpgid(pid_t);
extern pid_t	getsid(pid_t);
extern char	*getwd(char *);
extern int	lchown(const char *, uid_t, gid_t);
extern int	lockf(int, int, long);
extern int	readlink(const char *, char *, size_t);
extern void	*sbrk(int);
extern pid_t	setpgrp(void);
extern int	setregid(gid_t, gid_t);
extern int	setreuid(uid_t, uid_t);
extern int	symlink(const char *, const char *);
extern void	sync(void);
extern int	truncate(const char *, off_t);
extern useconds_t	ualarm(useconds_t, useconds_t);
extern int	usleep(useconds_t);
extern pid_t	vfork(void);



extern int	acct(const char *);
extern void	exit(int);
extern int	eaccess(const char *, int );
extern int	fattach(int, const char *);
extern int	fdetach(const char *);
extern char	*getlogin_r(char *, size_t);
extern char	*getpass_r(const char *, char *, size_t);
extern char	*gettxt(const char *, const char *);
extern int	ioctl(int, int, ...);
extern void	profil(unsigned short *, size_t, int, unsigned);
extern int	ptrace(int, pid_t, int, int);
extern int	rename(const char *, const char *);
extern int	setgroups(int, const gid_t *);
extern int	stime(const time_t *);
extern char	*ttyname_r(int, char *, size_t);









# 44 "../include/pthread/unistd.h" 2


 


# 59 "../include/pthread/unistd.h"

























# 48 "../include/pthread.h" 2


# 1 "/usr/include/stdio.h" 1 3
 


# 16 "/usr/include/stdio.h" 3

 











 
 
 

 
 
 
 




#pragma comment(exestr, "xpg4plus @(#) stdio.h 20.2 95/12/11 ")

#pragma pack(4)

















typedef long	wchar_t;




typedef long	wint_t;





















































 









typedef struct _FILE_	 
{
	int		__cnt;	 
	unsigned char	*__ptr;	 
	unsigned char	*__base;	 
	unsigned char	__flag;	 
	unsigned char	__file;	 
	unsigned char	__buf[2]; 
} FILE;



extern FILE	__iob[];











typedef char * 	va_list;


extern int	remove(const char *);
extern int	rename(const char *, const char *);
extern FILE	*tmpfile(void);
extern char	*tmpnam(char *);
extern int	fclose(FILE *);
extern int	fflush(FILE *);
extern FILE	*fopen(const char *, const char *);
extern FILE	*freopen(const char *, const char *, FILE *);
extern void	setbuf(FILE *, char *);
extern int	setvbuf(FILE *, char *, int, size_t);
		 
extern int	fprintf(FILE *, const char *, ...);
		 
extern int	fscanf(FILE *, const char *, ...);
		 
extern int	printf(const char *, ...);
		 
extern int	scanf(const char *, ...);
		 
extern int	sprintf(char *, const char *, ...);
		 
extern int	sscanf(const char *, const char *, ...);
extern int	vfprintf(FILE *, const char *, char * );
extern int	vprintf(const char *, char * );
extern int	vsprintf(char *, const char *, char * );
extern int	fgetc(FILE *);
extern char	*fgets(char *, int, FILE *);
extern int	fputc(int, FILE *);
extern int	fputs(const char *, FILE *);
extern int	getc(FILE *);
extern int	getchar(void);
extern char	*gets(char *);
extern int	putc(int, FILE *);
extern int	putchar(int);
extern int	puts(const char *);
extern int	ungetc(int, FILE *);
extern size_t	fread(void *, size_t, size_t, FILE *);
#pragma int_to_unsigned fread
extern size_t	fwrite(const void *, size_t, size_t, FILE *);
#pragma int_to_unsigned fwrite
extern int	fgetpos(FILE *, fpos_t *);
extern int	fseek(FILE *, long, int);
extern int	fsetpos(FILE *, const fpos_t *);
extern long	ftell(FILE *);
extern void	rewind(FILE *);
extern void	clearerr(FILE *);
extern int	feof(FILE *);
extern int	ferror(FILE *);
extern void	perror(const char *);

extern int	__filbuf(FILE *);
extern int	__flsbuf(int, FILE *);

















extern int	(fileno)(FILE *);  
extern char	*ctermid(char *);
extern FILE	*fdopen(int, const char *);

extern FILE	*popen(const char *, const char *);
extern char	*tempnam(const char *, const char *);
extern int	getw(FILE *);
extern int	putw(int, FILE *);
extern int	pclose(FILE *);

 



extern char	*optarg;
extern int	optind, opterr, optopt;
extern char	*cuserid(char *);  
extern int	getopt(int, char *const*, const char *);

# 264 "/usr/include/stdio.h" 3



extern int	system(const char *);
extern wint_t	fgetwc(FILE *);
extern wchar_t	*fgetws(wchar_t *, int, FILE *);
extern wint_t	fputwc(wint_t, FILE *);
extern int	fputws(const wchar_t *, FILE *);
extern wint_t	getwc(FILE *);
extern wint_t	getwchar(void);
extern wint_t	putwc(wint_t, FILE *);
extern wint_t	putwchar(wint_t);
extern wint_t	ungetwc(wint_t, FILE *);
		 
extern int	fwprintf(FILE *, const wchar_t *, ...);
		 
extern int	fwscanf(FILE *, const wchar_t *, ...);
		 
extern int	wprintf(const wchar_t *, ...);
		 
extern int	wscanf(const wchar_t *, ...);
		 
extern int	swprintf(wchar_t *, size_t, const wchar_t *, ...);
		 
extern int	swscanf(const wchar_t *, const wchar_t *, ...);
extern int	vfwprintf(FILE *, const wchar_t *, char * );
extern int	vfwscanf(FILE *, const wchar_t *, char * );
extern int	vwprintf(const wchar_t *, char * );
extern int	vwscanf(const wchar_t *, char * );
extern int	vswprintf(wchar_t *, size_t, const wchar_t *, char * );
extern int	vswscanf(const wchar_t *, const wchar_t *, char * );
extern void	funflush(FILE *);
		 
extern int	snprintf(char *, size_t, const char *, ...);
extern int	vsnprintf(char *, size_t, const char *, char * );
extern int	vfscanf(FILE *, const char *, char * );
extern int	vscanf(const char *, char * );
extern int	vsscanf(const char *, const char *, char * );

 





		 
extern int	nl_fprintf(FILE *, const char *, ...);
		 
extern int	nl_fscanf(FILE *, const char *, ...);
		 
extern int	nl_printf(const char *, ...);
		 
extern int	nl_scanf(const char *, ...);
		 
extern int	nl_sprintf(char *, const char *, ...);
		 
extern int	nl_sscanf(const char *, const char *, ...);







#pragma pack()



# 50 "../include/pthread.h" 2

# 1 "../include/pthread/limits.h" 1
 































# 1 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/limits.h" 1 3
 


 





 
# 1 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/syslimits.h" 1 3
 





# 1 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/limits.h" 1 3
 


 

# 114 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/limits.h" 3



# 1 "/usr/include/limits.h" 1 3
 


# 16 "/usr/include/limits.h" 3

 











 
 
 

 
 
 
 




#pragma comment(exestr, "xpg4plus @(#) limits.h 20.3 95/08/01 ")


























 

































 


























 











 










 























 












 

















 



























 








 








 








 




















 










extern long _sysconf(int);










# 117 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/limits.h" 2 3




# 7 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/syslimits.h" 2 3


# 11 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/limits.h" 2 3





 



 



 




 





 



 












 

 




 



 








 



 













 




 








 






 









# 33 "../include/pthread/limits.h" 2












# 51 "../include/pthread.h" 2

# 1 "/usr/include/sys/time.h" 1 3



#pragma comment(exestr, "@(#) time.h 60.1 97/01/07 ")



 









 
 





# 1 "/usr/include/sys/select.h" 1 3



#pragma comment(exestr, "@(#) select.h 26.2 95/11/30 ")



 










 







#pragma pack(4)





 




 













 


struct timeval {



	long	tv_sec;		 

	long	tv_usec;	 
};

#pragma pack()















extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);







# 25 "/usr/include/sys/time.h" 2 3



#pragma pack(4)





struct timezone {
	int             tz_minuteswest;	 
	int             tz_dsttime;	 
};














#pragma pack()

 



# 1 "/usr/include/sys/itimer.h" 1 3



#pragma comment(exestr, "@(#) itimer.h 26.1 95/11/30 ")



 













#pragma pack(4)




 







struct itimerval {
	struct timeval it_interval;	 
	struct timeval it_value;	 
};








 





 




















extern int	setitimer(int, const struct itimerval *, struct itimerval *);
extern int	getitimer(int, struct itimerval *);








# 120 "/usr/include/sys/itimer.h" 3


#pragma pack()

# 58 "/usr/include/sys/time.h" 2 3







extern int	gettimeofday (struct timeval *,  void *);
extern int	utimes (const char *, const struct timeval [2]);

extern int	adjtime (struct timeval *, struct timeval *);
extern int	settimeofday (struct timeval *, struct timezone *);












# 52 "../include/pthread.h" 2


 





# 1 "../include/pthread/errno.h" 1
 





























# 1 "/usr/include/errno.h" 1 3
 


# 16 "/usr/include/errno.h" 3

 











 
 
 

 
 
 
 




#pragma comment(exestr, "xpg4plus @(#) errno.h 20.1 94/12/04 ")


# 1 "/usr/include/sys/errno.h" 1 3



#pragma comment(exestr, "@(#) errno.h 26.1 95/11/30 ")



 









 
 

 
 
 

 









 



































	


	















 










 



























 










# 150 "/usr/include/sys/errno.h" 3




 



 

 












 














 




 



















# 238 "/usr/include/sys/errno.h" 3



# 44 "/usr/include/errno.h" 2 3















extern int	errno;



extern int sys_nerr;
extern char *sys_errlist[];
extern void perror(const char *);







# 31 "../include/pthread/errno.h" 2











# 60 "../include/pthread.h" 2

# 1 "../include/pthread/asm.h" 1
 






























 








 















 


 










 






















 
















# 61 "../include/pthread.h" 2


 






# 1 "/usr/include/setjmp.h" 1 3
 









# 1 "/usr/include/posix/setjmp.h" 1 3
 











 
 
 

 
 
 
 




#pragma comment(exestr, "posix @(#) setjmp.h 20.3 95/09/06 ")









typedef int	jmp_buf[6 ];


extern int	setjmp(jmp_buf);
extern void	longjmp(jmp_buf, int);


typedef int	sigjmp_buf[128 ];
extern int	sigsetjmp(sigjmp_buf, int);
extern void	siglongjmp(sigjmp_buf, int);







# 11 "/usr/include/setjmp.h" 2 3

# 70 "/usr/include/setjmp.h" 3

# 70 "../include/pthread.h" 2

















# 101 "../include/pthread.h"









# 1 "../include/pthread/sco_setjmp.h" 1
 



































typedef int pthread_sigjmp_buf[128 ];




extern int pthread_sigsetjmp (pthread_sigjmp_buf, int, int);
extern void pthread_siglongjmp (pthread_sigjmp_buf, int, int);










# 110 "../include/pthread.h" 2



 



 



 



 










typedef void *any_t;

# 154 "../include/pthread.h"














 



typedef int pthread_protocol_t;

typedef struct pthread_queue {
          struct pthread *head;
          struct pthread *tail;
} *pthread_queue_t;

typedef struct {
        struct pthread_queue queue;
        char lock;
        struct pthread *owner;
        int flags;

        int prio_ceiling;
        pthread_protocol_t protocol;
        int prev_max_ceiling_prio;

} pthread_mutex_t;

typedef struct {
        int flags;

        int prio_ceiling;
        pthread_protocol_t protocol;

} pthread_mutexattr_t;

 
 
 
 





extern int pthread_mutex_lock      (pthread_mutex_t *__mutex)  ;
extern int pthread_mutex_trylock   (pthread_mutex_t *__mutex)  ;
extern int pthread_mutex_unlock    (pthread_mutex_t *__mutex)  ;
extern int pthread_mutex_init      (pthread_mutex_t *__mutex,
                                                pthread_mutexattr_t *__attr)  ;
extern int pthread_mutex_destroy   (pthread_mutex_t *__mutex)  ;
extern int pthread_mutex_setprio_ceiling
                                   (pthread_mutex_t *__mutex,
                                                int __prio_ceiling)  ;
extern int pthread_mutex_getprio_ceiling
                                   (pthread_mutex_t __mutex)  ;
extern int pthread_mutexattr_init  (pthread_mutexattr_t *__attr)  ;
extern int pthread_mutexattr_destroy
                                   (pthread_mutexattr_t *__attr)  ;
extern int pthread_mutexattr_setprotocol
                                   (pthread_mutexattr_t *__attr,
                                                pthread_protocol_t __protocol)  ;
extern pthread_protocol_t pthread_mutexattr_getprotocol
                                   (pthread_mutexattr_t __attr)  ;

extern int pthread_mutexattr_setprio_ceiling
                                   (pthread_mutexattr_t *__attr,
                                                int __prio_ceiling)  ;
extern int pthread_mutexattr_getprio_ceiling
                                   (pthread_mutexattr_t __attr)  ;
extern int pthread_mutexattr_getpshared
                                   (pthread_mutexattr_t *__attr,
                                                int *__pshared)  ;
extern int pthread_mutexattr_setpshared
                                   (pthread_mutexattr_t *__attr,
                                                int __pshared)  ;





 



typedef struct {
        short init;
        short exec;
        pthread_mutex_t mutex;
} pthread_once_t;



 


typedef struct {
        struct pthread_queue queue;
        int flags;
        int waiters;
        pthread_mutex_t *mutex;
} pthread_cond_t;

typedef struct {
        int flags;
} pthread_condattr_t;

 
 
 
 




 
extern int pthread_cond_destroy      (pthread_cond_t *__cond)  ;
extern int pthread_cond_init         (pthread_cond_t *__cond,
                                                  pthread_condattr_t *__attr)  ;
extern int pthread_condattr_init     (pthread_condattr_t *__attr)  ;
extern int pthread_condattr_destroy  (pthread_condattr_t *__attr)  ;
extern int pthread_cond_wait         (pthread_cond_t *__cond,
                                                  pthread_mutex_t *__mutex)  ;
extern int pthread_cond_timedwait    (pthread_cond_t *__cond,
                                                  pthread_mutex_t *__mutex,
                                                  struct timespec *__timeout)  ;
extern int pthread_cond_signal       (pthread_cond_t *__cond)  ;
extern int pthread_cond_broadcast    (pthread_cond_t *__cond)  ;
extern int pthread_condattr_getpshared
                                     (pthread_condattr_t *__attr,
                                                  int *__pshared)  ;
extern int pthread_condattr_setpshared
                                     (pthread_condattr_t *__attr,
                                                  int __pshared)  ;





 



typedef any_t (*pthread_func_t)  (any_t __arg)  ;
typedef void (*pthread_sighandler_t)  (int)  ;

typedef struct {
  int flags;

  int stacksize;

  int contentionscope;
  int inheritsched;
  int detachstate;
  int sched;

  int prio;                       

  struct timespec starttime, deadline, period;
} pthread_attr_t;

 




 


typedef int pthread_key_t;

typedef struct pthread_cleanup *pthread_cleanup_t;

typedef struct pthread {

        pthread_sigjmp_buf  context;             
        pthread_sigjmp_buf  body;                




        volatile int terrno;                
        volatile int ret;                   
        char *stack_base;                   
        int state;                          
        struct pthread *next[3 ];   
        int num_timers;                     
        struct timeval interval;            
        struct p_siginfo sig_info[32 +1 ];   
        int sig;                            
        int code;                           
        int osp, opc, obp;                  
        struct ucontext  *nscp;             
        struct ucontext  *scp;              
        struct pthread_queue joinq;         
        pthread_cond_t *cond;               
        pthread_queue_t queue; 
        sigset_t mask;         
        sigset_t pending;      
        sigset_t sigwaitset;   
        pthread_func_t func;   
        any_t arg;             
        any_t result;          
        any_t key[256 ];     
        pthread_cleanup_t cleanup_top;      
        pthread_attr_t attr;                
        int base_prio;                      
        int max_ceiling_prio;  
        int new_prio;          





        int wait_on_select;                 
        int nfds;                           
        int how_many;                       
        struct pollfd* fds;                 















        struct timeval tp;                 

} *pthread_t;


# 413 "../include/pthread.h"



# 441 "../include/pthread.h"



 
 
 
 




 
extern pthread_t pthread_self            (void)  ;
extern void pthread_init                 (void)  ;
extern int pthread_create                (pthread_t *__thread,
                                                      pthread_attr_t *__attr,
                                                      pthread_func_t __func,
                                                      any_t __arg)  ;
extern int pthread_equal                 (pthread_t __t1,
                                                      pthread_t __t2)  ;
extern int pthread_detach                (pthread_t *__thread)  ;
extern int pthread_join                  (pthread_t __thread,
                                                      any_t *__status)  ;
extern void pthread_yield                (any_t __arg)  ;
extern void pthread_exit                 (any_t __status)  ;
extern int pthread_attr_init             (pthread_attr_t *__attr)  ;
extern int pthread_attr_destroy          (pthread_attr_t *__attr)  ;
extern int pthread_getschedattr          (pthread_t __thread,
                                                      pthread_attr_t *__attrs)  ;
extern int pthread_setschedattr          (pthread_t __thread,
                                                      pthread_attr_t __attrs)  ;
extern int pthread_attr_setstacksize     (pthread_attr_t *__attr,
                                                      size_t __stacksize)  ;
extern int pthread_attr_getstacksize     (pthread_attr_t *__attr,
                                                      size_t *__stacksize)  ;
extern int pthread_attr_setscope         (pthread_attr_t *__attr,
                                                      int __contentionscope)  ;
extern int pthread_attr_setinheritsched  (pthread_attr_t *__attr,
                                                      int __inherit)  ;
extern int pthread_attr_setsched         (pthread_attr_t *__attr,
                                                      int __scheduler)  ;
extern int pthread_attr_setprio          (pthread_attr_t *__attr,
                                                      int __priority)  ;
extern int pthread_attr_getscope         (pthread_attr_t __attr)  ;
extern int pthread_attr_getinheritsched  (pthread_attr_t *__attr)  ;
extern int pthread_attr_getsched         (pthread_attr_t *__attr)  ;
extern int pthread_attr_getprio          (pthread_attr_t *__attr)  ;

extern int pthread_attr_getstarttime_np  (pthread_attr_t *__attr,
                                                      struct timespec *__tp)  ;
extern int pthread_attr_setstarttime_np  (pthread_attr_t *__attr,
                                                      struct timespec *__tp)  ;
extern int pthread_attr_getdeadline_np   (pthread_attr_t *__attr,
                                                      struct timespec *__tp)  ;
extern int pthread_attr_setdeadline_np   (pthread_attr_t *__attr,
                                                      struct timespec *__tp,
                                                      pthread_func_t func)  ;
extern int pthread_attr_getperiod_np     (pthread_attr_t *__attr,
                                                      struct timespec *__tp)  ;
extern int pthread_attr_setperiod_np     (pthread_attr_t *__attr,
                                                      struct timespec *__tp,
                                                      pthread_func_t func)  ;

extern int pthread_key_create            (pthread_key_t *__key,
                                                      void (*__func)
                                                      (any_t __value))  ;
extern int pthread_setspecific           (pthread_key_t __key,
                                                      any_t __value)  ;
extern int pthread_getspecific           (pthread_key_t __key,
                                                      any_t *__value)  ;
extern int pthread_cleanup_push          (void (*__func)
                                                      (any_t __value),
                                                      any_t __arg)  ;
extern int pthread_cleanup_pop           (int __execute)  ;
extern int sched_get_priority_max        (int __policy)  ;
extern int sched_get_priority_min        (int __policy)  ;
extern int pthread_attr_setdetachstate   (pthread_attr_t *__attr,
                                                      int *__detachstate)  ;
extern int pthread_attr_getdetachstate   (pthread_attr_t *__attr)  ;
extern int pthread_once                  (pthread_once_t *__once_c,
                                                      void (*__func)
                                                      (any_t __value))  ;

 


extern int pthread_setprio_np            (pthread_t __thread,
                                                      int __prio)  ;
extern void pthread_setsigcontext_np     (struct ucontext  *__scp,
                                                      jmp_buf __env,
                                                      int __val)  ;
extern int pthread_lock_stack_np         (pthread_t __p)  ;


 
 
 

extern int sigwait              (const  sigset_t *__set,
					     int *__sig)  ;
extern int sigprocmask          (int __how,
                                             const  sigset_t *__set,
                                             sigset_t *__oset)  ;
extern int sigpending           (sigset_t *__set)  ;
extern int sigsuspend           (const  sigset_t *__set)  ;
extern int pause                (void)  ;










extern int raise                (int __sig)  ;
extern int pthread_kill         (pthread_t __thread,
                                             int __sig)  ;
extern int pthread_cancel       (pthread_t __thread)  ;
extern int pthread_setintr      (int __state)  ;
extern int pthread_setintrtype  (int __type)  ;
extern void pthread_testintr    (void)  ;
extern int sigaction            (int __sig,
                                             const  struct sigaction *__act,
                                             struct sigaction *__oact)  ;

extern pthread_sighandler_t signal
			         (int __sig,
                                             pthread_sighandler_t handler)  ;








 


extern int nanosleep            (const struct timespec *__rqtp,
                                             struct timespec *__rmtp)  ;
extern unsigned int sleep       (unsigned int __seconds)  ;
extern int clock_gettime        (int __clock_id,
                                             struct timespec *__tp)  ;

 
 
 
















extern int setjmp          (jmp_buf __env)  ;
extern void longjmp        (  jmp_buf __env,
                                        int __val)  ;
extern int sigsetjmp       (sigjmp_buf __env,
                                        int __savemask)  ;
extern void siglongjmp     (  sigjmp_buf __env,
                                        int __val)  ;

 
 
 

extern int read   (int __fd,
                               void *__buf,
                               size_t  __nbytes)  ;
extern int write  (int __fd,
                               const void *__buf,
                               size_t  __nbytes)  ;








# 69 "internals.h" 2




















 





















 




# 1 "/usr/include/sys/param.h" 1 3



#pragma comment(exestr, "@(#) param.h 58.1 96/10/12 ")



 









 
 

 
 
 

 
 

 
 

 











 







 




















 






 







 







 








 




			 
			 



 





 




















 





 





 






























 



 



 






# 116 "internals.h" 2





 



typedef struct timer_ent {
        struct timeval tp;                      
        pthread_t thread;                       
        int mode;                               
        struct timer_ent *next[0 +1];  
} *timer_ent_t;



 

typedef struct pthread_timer_q_s {
	struct timer_ent *head;
	struct timer_ent *tail;
} pthread_timer_q;





typedef pthread_timer_q *pthread_timer_q_t;
























pthread_mutexattr_t pthread_mutexattr_default;












pthread_condattr_t pthread_condattr_default;





 









pthread_attr_t pthread_attr_default;



struct pthread_cleanup {
  void (*func)();
  any_t arg;
  struct pthread_cleanup *next;
};

typedef struct kernel {
  pthread_t k_pthread_self;             
  volatile int k_is_in_kernel;          
  int k_is_updating_timer;              
  volatile int k_state_change;          
  volatile sigset_t k_new_signals;      
  sigset_t k_pending_signals;           
  sigset_t k_all_signals;               
  sigset_t k_no_signals;                
  sigset_t k_cantmask;                  
  char *k_process_stack_base;           
  struct pthread_queue k_ready;         
  struct pthread_queue k_all;           
  sigset_t k_handlerset;                
  char *k_set_warning;                  
  char *k_clear_warning;                
  char *k_prio_warning;                 
                                        
  sigset_t k_proc_mask;		        
  int  k_cur_heap;		        
  volatile struct timespec k_timeofday; 


  volatile int k_gnfds;                 
  volatile int k_gmaxnfds;		 
  struct pollfd* k_gfds;		 
  struct pollfd* k_gafds[2];		 







} kernel_t;


kernel_t pthread_kern;




 

 








































 
















 


















 



# 342 "internals.h"







# 369 "internals.h"

# 385 "internals.h"



# 408 "internals.h"

# 419 "internals.h"







# 440 "internals.h"












struct kernel_stack {
  char body[( 54* ((( ((20 * 4))  )+(4 -1)) & ~(4 -1)) + ((( (608 )  )+(4 -1)) & ~(4 -1)) ) ];
  char stack[((( ((20 * 4))  )+(4 -1)) & ~(4 -1)) ];
};

























# 45 "signal.c" 2

# 1 "setjmp.h" 1
 






















































# 1 "/usr/include/setjmp.h" 1 3
 










# 70 "/usr/include/setjmp.h" 3

# 56 "setjmp.h" 2





# 71 "setjmp.h"


# 84 "setjmp.h"














# 114 "setjmp.h"





















# 46 "signal.c" 2

# 1 "offsets.h" 1
 


























# 42 "offsets.h"

# 47 "signal.c" 2

# 1 "kprintf.h" 1






# 48 "signal.c" 2






# 63 "signal.c"

# 1 "sco/signal.h" 1
 









































extern int pthread_sigaction (int, const struct sigaction *, struct sigaction *);
extern int pthread_sigprocmask (int, const sigset_t *, sigset_t *);
extern int pthread_sigsuspend (const sigset_t *);







# 64 "signal.c" 2





# 1 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/sys/stat.h" 1 3



#pragma comment(exestr, "@(#) stat.h 26.2 95/11/30 ")



 









 
 

 
 
 

 
 

 
 

 







 















































#pragma pack(4)





struct st_stat32 {		 
	dev_t	st_dev;		 
	long	st_pad1[3];
	ino32_t	st_ino;		 
	mode_t 	st_mode;	 
	nlink_t	st_nlink;	 
	uid_t 	st_uid;		 
	gid_t 	st_gid;		 
	dev_t	st_rdev;	 
	long	st_pad2[2];
	off_t	st_size;	 
	long	st_pad3;
	time_t	st_atime;	 
	time_t	st_mtime;	 
	time_t	st_ctime;	 
	long	st_blksize;	 
	long	st_blocks;	 
	char	st_fstype[16 ];	 
	long	st_pad4[7];
	long	st_sco_flags;	 
};

struct st_stat16 {		 
	dev_t	st_dev;		 
	ino16_t	st_ino;		 
	mode_t 	st_mode;	 
	nlink_t	st_nlink;	 
	uid_t 	st_uid;		 
	gid_t 	st_gid;		 
	dev_t	st_rdev;	 
	off_t	st_size;	 
	time_t	st_atime;	 
	time_t	st_mtime;	 
	time_t	st_ctime;	 
};

#pragma pack()

 










extern int	st_stat16(const char *, struct st_stat16 *);
extern int	st_fstat16(int, struct st_stat16 *);

extern int	st_lstat16(const char *, struct st_stat16 *);
extern int	st_statlstat16(const char *, struct st_stat16 *);

extern int	st_stat32(const char *, struct st_stat32 *);
extern int	st_fstat32(int, struct st_stat32 *);
extern int	st_lstat32(const char *, struct st_stat32 *);
extern int	st_statlstat32(const char *, struct st_stat32 *);





# 171 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/sys/stat.h" 3





#pragma pack(4)




	 






struct stat {			 
	dev_t	st_dev;		 
	long	st_pad1[3];
	ino32_t	st_ino;		 
	mode_t 	st_mode;	 
	nlink_t	st_nlink;	 
	uid_t 	st_uid;		 
	gid_t 	st_gid;		 
	dev_t	st_rdev;	 
	long	st_pad2[2];
	off_t	st_size;	 
	long	st_pad3;
	time_t	st_atime;	 
	time_t	st_mtime;	 
	time_t	st_ctime;	 
	long	st_blksize;	 
	long	st_blocks;	 
	char	st_fstype[16 ];	 
	long	st_pad4[8];
};
#pragma pack()











	 





extern int	__stat32(const char *, struct stat *);
extern int	__fstat32(int, struct stat *);
extern int	__lstat32(const char *, struct stat *);
extern int	__statlstat32(const char *, struct stat *);







 

static int	stat(const char *__f, struct stat *__p) {
	return __stat32(__f, __p);
}


 





 

static int	fstat(int __i, struct stat *__p) {
	return __fstat32(__i, __p);
}


 








 

static int	lstat(const char *__f, struct stat *__p) {
	return __lstat32(__f, __p);
}


 








 

static int	statlstat(const char *__f, struct stat *__p) {
	return __statlstat32(__f, __p);
}


 



# 365 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/sys/stat.h" 3



# 427 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/sys/stat.h" 3




 


















































 




 







 








extern int	chmod(const char *, mode_t);
extern int	mkdir(const char *, mode_t);
extern int	mkfifo(const char *, mode_t);
extern mode_t	umask(mode_t);




extern int	fchmod(int, mode_t);

extern int	mknod(const char *, mode_t, dev_t);













# 549 "/usr/local/lib/gcc-lib/i686-pc-sco3.2v5.0.4/egcs-2.91.57/include/sys/stat.h" 3



# 69 "signal.c" 2

# 1 "/usr/include/sys/socket.h" 1 3
 
 














 
 
























 

 



 








 


















 












 


struct linger {
	int             l_onoff;	 
	int             l_linger;	 
};

 




 






struct opthdr {
	long            level;	 
	long            name;	 
	long            len;	 
};




# 138 "/usr/include/sys/socket.h" 3


 


























 


struct sockaddr {
	u_short         sa_family;	 
	char            sa_data[14];	 
};

 


struct sockproto {
	unsigned short  sp_family;	 
	unsigned short  sp_protocol;	 
};

 

























 




 



struct msghdr {
	caddr_t         msg_name;	 
	u_int           msg_namelen;	 
	struct iovec   *msg_iov;	 
	u_int           msg_iovlen;	 
	caddr_t         msg_control;	 
	u_int           msg_controllen;	 
	int		msg_flags;	 
};











 

















struct cmsghdr {
        int     cmsg_level;              
        int     cmsg_type;               
        u_int   cmsg_len;                
 
};

 


 








 


 











 



 


 


























































 







 





 





 


struct socksysreq {
	 
	int   args[7];
};

 



struct socknewproto {
	int             family;	 
	int             type;	 
	int             proto;	 
	dev_t           dev;	 
	int             flags;	 
};

 
















 

































 




 
 

 




struct gi_arg {
	caddr_t   gi_where;
	unsigned  gi_size;
};



# 1 "/usr/include/sys/cdefs.h" 1 3



#pragma comment(exestr, "@(#) cdefs.h 59.1 96/11/20 ")




 










 
 














 
 










































 



















# 118 "/usr/include/sys/cdefs.h" 3



# 467 "/usr/include/sys/socket.h" 2 3


 
int     accept  (int, struct sockaddr *, int *)  ;
int     bind  (int, const struct sockaddr *, int)  ;
int     connect  (int, const struct sockaddr *, int)  ;
int     getpeername  (int, struct sockaddr *, int *)  ;
int     getsockname  (int, struct sockaddr *, int *)  ;
int     getsockopt  (int, int, int, void *, int *)  ;
int     setsockopt  (int, int, int, const void *, int)  ;
int     listen  (int, int)  ;
int     recv  (int, void *, int, int)  ;
int     recvfrom  (int, void *, int, int, struct sockaddr *, int *)  ;
int     recvmsg  (int, struct msghdr *, int)  ;
int     send  (int, const void *, int, int)  ;
int     sendmsg  (int, const struct msghdr *, int)  ;
int     sendto  (int, const void *, int, int, const struct sockaddr *, int)  ;
int     shutdown  (int, int)  ;
int     socket  (int, int, int)  ;
int     socketpair  (int, int, int, int[2])  ;
 



# 70 "signal.c" 2

















# 1 "/usr/include/sys/resource.h" 1 3



#pragma comment(exestr, "@(#) resource.h 26.1 95/11/30 ")



 









 
 








#pragma pack(4)




 









 








struct	rusage {
	struct timeval ru_utime;	 
	struct timeval ru_stime;	 
	long	ru_maxrss;

	long	ru_ixrss;		 
	long	ru_idrss;		 
	long	ru_isrss;		 
	long	ru_minflt;		 
	long	ru_majflt;		 
	long	ru_nswap;		 
	long	ru_inblock;		 
	long	ru_oublock;		 
	long	ru_msgsnd;		 
	long	ru_msgrcv;		 
	long	ru_nsignals;		 
	long	ru_nvcsw;		 
	long	ru_nivcsw;		 

};

typedef unsigned long rlim_t;	 

struct rlimit {
	rlim_t	rlim_cur;	 
	rlim_t	rlim_max;	 
};






















extern int getrlimit (int, struct rlimit *);
extern int setrlimit (int, const struct rlimit *);
extern int getrusage (int, struct rusage *);




extern int getpriority (int, long);
extern int setpriority (int, long, int);













#pragma pack()

# 87 "signal.c" 2

# 1 "/usr/include/sys/wait.h" 1 3



#pragma comment(exestr, "@(#) wait.h 26.1 95/11/30 ")



 









 
 

 
 

 








 











 



				 


				 

				 

				 



# 103 "/usr/include/sys/wait.h" 3


 













 












# 141 "/usr/include/sys/wait.h" 3



 

# 1 "/usr/include/sys/procset.h" 1 3



#pragma comment(exestr, "@(#) procset.h 26.1 95/11/30 ")



 











#pragma pack(4)






typedef	enum

	idtype

	{
		P_PID,		 
		P_PPID,		 
		P_PGID,		 
		P_SID,		 
		P_CID,		 
		P_UID,		 
		P_GID,		 
		P_ALL		 
} idtype_t;


typedef enum idop {
		POP_DIFF,	 
		POP_AND,	 
		POP_OR,		 
		POP_XOR		 
} idop_t;

typedef struct procset_t {
		idop_t		p_op;
		idtype_t	p_lidtype;
		id_t		p_lid;
		idtype_t	p_ridtype;
		id_t		p_rid;
} procset_t;



















#pragma pack()

# 146 "/usr/include/sys/wait.h" 2 3







extern pid_t	wait(int *);
extern pid_t	waitpid(pid_t, int *, int);


extern int	wait3(int *, int, struct rusage *);
extern int	waitid(idtype_t, id_t, siginfo_t *, int);










# 88 "signal.c" 2








# 1 "mutex.h" 1
 





























    
 








# 54 "mutex.h"








# 81 "mutex.h"





















# 126 "mutex.h"


 








# 152 "mutex.h"


# 165 "mutex.h"



# 199 "mutex.h"


 











# 226 "mutex.h"



# 96 "signal.c" 2




# 1 "/usr/include/stropts.h" 1 3
 









 











 
 
 

 
 
 
 




#pragma comment(exestr, "xpg4plus @(#) stropts.h 20.1 94/12/04 ")





 




# 1 "/usr/include/sys/stropts.h" 1 3



#pragma comment(exestr, "@(#) stropts.h 26.1 95/11/30 ")



 









 
 

 
 
 

 



# 1 "/usr/include/sys/conf.h" 1 3



#pragma comment(exestr, "@(#) conf.h 60.1 97/02/05 ")



 









 






 
 

 
 
 

 
 

 
 






#pragma pack(4)




 




struct bdevsw {
	int	(*d_open)();
	int	(*d_close)();
	int	(*d_strategy)();
	int	(*d_print)();
	char	 *d_name;
	struct iobuf	*d_tab;
};




 







 


struct cdevsw {
	int	(*d_open)();
	int	(*d_close)();
	int	(*d_read)();
	int	(*d_write)();
	int	(*d_ioctl)();
	struct tty *d_ttys;
	struct streamtab *d_str;
	char	 *d_name;
};




 



struct disable_devsw {
	char	 *d_name;
	int	(*d_exec)();
	int	(*d_exit)();
	int	(*d_halt)();
	int	(*d_init)();
	int	(*d_pminit)();
	int	(*d_intr)();
	int	(*d_kenter)();
	int	(*d_kexit)();
	int	(*d_poll)();
	int	(*d_probe)();
	int	(*d_start)();
	int	(*d_swtch)();
};




 










 



struct	exdevsw	{
	int	dev_major;		 
	int	(*exit)();		 
	int	(*exec)();		 
};







 




struct	conssw {
	int	(*co)();
	int	co_dev;
	int	(*ci)();
};




struct fmodsw {
	char	f_name[8 +1];
	struct  streamtab *f_str;
};








 


struct linesw {
	int	(*l_open)();
	int	(*l_close)();
	int	(*l_read)();
	int	(*l_write)();
	int	(*l_ioctl)();
	int	(*l_input)();
	int	(*l_output)();
	int	(*l_mdmint)();
};


















 


struct termsw {
	int	(*t_input)();
	int	(*t_output)();
	int	(*t_ioctl)();
};





 
struct fstypsw {
 	int		(*fs_init)();
 	int		(*fs_iput)();
 	struct inode	*(*fs_iread)();
 	int		(*fs_fsid)();
 	int		(*fs_iupdat)();
 	int		(*fs_readi)();
 	int		(*fs_writei)();
 	int		(*fs_itrunc)();
 	int		(*fs_statf)();
 	int		(*fs_namei)();
 	int		(*fs_mount)();
 	int		(*fs_umount)();
 	struct inode	*(*fs_getinode)();
 	int		(*fs_openi)();		 
 	int		(*fs_closei)();		 
 	int		(*fs_update)();		 
 	int		(*fs_statfs)();		 
 	int		(*fs_access)();
 	int		(*fs_getdents)();
 	int		(*fs_allocmap)();	 
						 
						 
						 
 	int		*(*fs_freemap)();	 
 	int		(*fs_readmap)();	 
						 
 	int		(*fs_setattr)();	 
 	int		(*fs_notify)();		 
 	int		(*fs_fcntl)();		 
 	int		(*fs_fsinfo)();		 
 	int		(*fs_ioctl)();		 
 	int		(*fs_security)();	 
 	int		(*fs_rename)();		 
 	int		(*fs_fsync)();		 
 	int		(*fs_rmount)();		 
 	int		(*fs_rumount)();	 
};
# 260 "/usr/include/sys/conf.h" 3



 
struct fsinfo {
	long		fs_flags;	 
	struct mount	*fs_pipe;	 
					 
					 
	char		*fs_name; 	 
					 
	long		fs_notify;	 
					 
					 
};




 
struct fsrootsw {
	char *fsname;
	int (*rmount)();
	int (*rumount)();
}; 

 


struct evdevsw {			 
	char *devnam;			 
	int (*eventizer)();		 
};




#pragma pack()



# 29 "/usr/include/sys/stropts.h" 2 3




#pragma pack(4)




 
















 




					 


 








 


struct bandinfo {
	unsigned char	bi_pri;		 
	int		bi_flag;	 
};


 

















 





 




 






 





 






 





 



































 


struct strioctl {
	int 	ic_cmd;			 
	int	ic_timout;		 
	int	ic_len;			 
	char	*ic_dp;			 
};



 






 


struct strbuf {
	int	maxlen;			 
	int	len;			 
	char	*buf;			 
};


 



struct strpeek {
	struct strbuf ctlbuf;
	struct strbuf databuf;
	long	      flags;
};

 


struct strfdinsert {
	struct strbuf ctlbuf;
	struct strbuf databuf;
	long	      flags;
	int	      fildes;
	int	      offset;
};


 


struct strrecvfd {






	int fd;

	uid_t uid;
	gid_t gid;
	char _fill[8];
};


 


struct str_mlist {
	char	l_name[8 +1];	 
};
	
struct str_list {
	int		 sl_nmods;	 
	struct str_mlist *sl_modlist;	 
};


#pragma pack()

# 46 "/usr/include/stropts.h" 2 3




extern int isastream(int);
extern int ioctl(int, int, ...);
extern int fattach(int, const char *);
extern int fdetach(const char *);

extern int getmsg(int, struct strbuf *, struct strbuf *, int *);
extern int putmsg(int, const struct strbuf *, const struct strbuf *, int);

extern int getpmsg(int, struct strbuf *, struct strbuf *, int *, int *);
extern int putpmsg(int, const struct strbuf *, const struct strbuf *, int, int);







# 100 "signal.c" 2

# 1 "/usr/include/poll.h" 1 3
 









 











 
 
 

 
 
 
 

 




# 1 "/usr/include/sys/poll.h" 1 3



#pragma comment(exestr, "@(#) poll.h 26.1 95/11/30 ")



 









 
 

 
 
 

 


#pragma pack(4)






typedef unsigned long   nfds_t;


 



struct pollfd {
	int fd;				 
	short events;			 
	short revents;			 
};

 











 







# 76 "/usr/include/sys/poll.h" 3









extern int poll(struct pollfd *, nfds_t, int);










#pragma pack()

# 37 "/usr/include/poll.h" 2 3




# 101 "signal.c" 2







# 119 "signal.c"







 





extern char __pthread_init_hack;
char *__pthread_init_hack_2 = &__pthread_init_hack;














pthread_timer_q pthread_timer;                 
static struct itimerval it;                    



int gtimeout = 0;




struct sigaction pthread_user_handler[32 +1 ];  
volatile int new_code[32 +1 ];                  
static int pending_code[32 +1 ];                
static sigset_t synchronous;                   
static sigset_t sig_handling;                  

 
 


void pthread_sigcpyset2set(dst, src)
int *dst, *src;
{
  int i;

  for (i = 0; i < sizeof(sigset_t); i += sizeof(int))
    *(dst++) = *(src++);
}

 
 


void pthread_sigaddset2set(dst, src)
int *dst, *src;
{
  int i;

  for (i = 0; i < sizeof(sigset_t); i += sizeof(int))
    *(dst++) |= *(src++);
}

 
 


void pthread_sigdelset2set(dst, src)
int *dst, *src;
{
  int i;

  for (i = 0; i < sizeof(sigset_t); i += sizeof(int))
    *(dst++) &= ~(*(src++));
}

 
 


int pthread_sigismemberset2set(dst, src)
int *dst, *src;
{
  int i;

  for (i = 0; i < sizeof(sigset_t); i += sizeof(int))
    if (*(dst++) & *(src++))
      return(1 );

  return(0 );
}

 
 


int pthread_signonemptyset(set)
int *set;
{
  int i;

  for (i = 0; i < sizeof(sigset_t); i += sizeof(int))
    if (*(set++))
      return(1 );

  return(0 );
}

 
 



int pthread_siggeset2set(dst, src)
int *dst, *src;
{
  int i;

  for (i = 0; i < sizeof(sigset_t); i += sizeof(int))
    if ((*(dst++) & *(src)) != *(src))
      return(0 );
    else
      src++;

  return(1 );
}

 
 


int pthread_sigeqset2set(dst, src)
int *dst, *src;
{
  int i;

  for (i = 0; i < sizeof(sigset_t); i += sizeof(int))
    if (*(dst++) != *(src++))
      return(0 );

  return(1 );
}


 
 




void pthread_clear_sighandler()
{
  struct sigaction vec;
  register int sig;
  struct itimerval it;

  vec. _sa_function._sa_handler  = ((void(*)(int))  0) ;
  pthread_sigcpyset2set(&vec.sa_mask, & pthread_kern.k_all_signals );
  vec.sa_flags = 0;

  for (sig = 1; sig < 32 ; sig++)
    if (sig != 29  && sig != 9  && sig != 23 )
      if (pthread_p_sigaction (sig, &vec, (struct sigaction *) 0 ))



          ;

  if (!getitimer(0 , &it) && (( &it.it_value )->tv_sec > 0 || ( &it.it_value )->tv_usec > 0) ) {
    it.it_value.tv_sec = it.it_value.tv_usec = 0;
    it.it_interval.tv_sec = it.it_interval.tv_usec = 0;
    setitimer(0 , &it, (struct itimerval *) 0 );
  }
}


 
 




static void default_action(sig)
     int sig;
{
  switch (sig) {





  case 25 :
  case 18  :
  case 20 :
    break;  

  case 23 :
  case 24 :
  case 26 :
  case 27 :



    kill(getpid(), 23 );   

    break;


  default:
# 346 "signal.c"


    pthread_clear_sighandler();
    kill(getpid(), sig);  
    {
      sigset_t empty;

      (*( &empty ) = (sigset_t) 0) ;
      pthread_p_sigprocmask (0 , &empty, (struct sigset_t *) 0 );
    }







    pthread_process_exit(-1);  

  }
}

 
 



static int handle_thread_signal(p, sig, code)
pthread_t p;
int sig;
int code;
{
  register struct ucontext  *scp;

  static int aio_calculate();


  extern void pthread_fake_call_wrapper_wrapper();



   


  if (sig == 9  ) {









      if (pthread_timer.head->mode == 0x04  && p->queue == & pthread_kern.k_ready ) {
        pthread_cancel_timed_sigwait(p, 1 , ((0x01  | 0x02 )  | 0x04  | 0x08 ) , 0 );
        pthread_q_deq(& pthread_kern.k_ready , p, 0 );
        pthread_q_primary_enq(& pthread_kern.k_ready , p);
      } else {

        pthread_cancel_timed_sigwait(p, 1 , ((0x01  | 0x02 )  | 0x04  | 0x08 ) , p->queue != & pthread_kern.k_ready );

      }

      return(1 );



  }

  
   


  if (p->state & 0x40  && (*( &p->sigwaitset ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {
    pthread_q_wakeup_thread(((pthread_queue_t) 0 ) , p, 0 );
    p->state &= ~0x40 ;
    pthread_sigaddset2set(&p->mask, &p->sigwaitset);
    pthread_sigdelset2set(&p->mask, & pthread_kern.k_cantmask );
    (*( &p->sigwaitset ) &= ~((unsigned int)1 << ((   sig  ) - 1)) ) ;
    return(1 );
  }
  
   


  if (pthread_user_handler[sig]. _sa_function._sa_handler  == ((void(*)(int))  1)  && sig != (32 -1) )
    return(1 );
    
   


  if (pthread_user_handler[sig]. _sa_function._sa_handler  == ((void(*)(int))  0)  && sig != (32 -1) ) {
    default_action(sig);
    return(1 );
  }

   


  if ((*( & pthread_kern.k_handlerset  ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {
    if (p->state & 0x10 ) {

      if ((*( &p->sigwaitset ) & ((unsigned int)1 << ((   23    ) - 1)) ) )
       {
         p->wait_on_select = 0;
         (*( &p->sigwaitset ) &= ~((unsigned int)1 << ((   23    ) - 1)) ) ;
         aio_calculate();
         p->how_many = -1;
       }

      p->terrno = 4 ;
    }
      
    if (!(p->state & 0x8 )) {
      if (p->state & 0x80 )
        pthread_cancel_timed_sigwait(p, 0 , (0x01  | 0x02 ) , 1 );
      else {
        pthread_q_wakeup_thread(p->queue, p, 0 );
        if (p->state & (0x40  | 0x100 )) {
          p->state &= ~(0x40  | 0x100 );
          (*( &p->sigwaitset ) = (sigset_t) 0) ;
        }
      }
    }
      
    p->sig_info[sig].si_signo = sig;







      p->sig_info[sig].si_code = code;


# 493 "signal.c"

    if (pthread_not_called_from_sighandler(p->context[5 ]))
      p->nscp = (struct ucontext  *) (struct ucontext  *) 0  ;
    p->sig = sig;
    p->osp = p->context[4 ];

    p->obp = p->context[3 ];

    p->opc = p->context[5 ];
    p->context[5 ] = (int) pthread_fake_call_wrapper_wrapper;




# 515 "signal.c"

    return(1 );
  }

   


  if (sig == (32 -1) ) {
    if (p->state & 0x80 )
      pthread_cancel_timed_sigwait(p, 0 , (0x10 | ((0x01  | 0x02 )  | 0x04  | 0x08 ) ) , 1 );
    else if (p->state & (0x40  | 0x100 )) {
      p->state &= ~(0x40  | 0x100 );
      (*( &p->sigwaitset ) = (sigset_t) 0) ;
    }

    if (p->queue && !(p->state & 0x8 ))
      pthread_q_deq(p->queue, p, 0 );
    
    pthread_q_deq(& pthread_kern.k_all , p, 1 );
    
     


    pthread_sigcpyset2set(&p->mask, & pthread_kern.k_all_signals );
    (*( &p->mask ) |= ((unsigned int)1 << ((   (32 -1)   ) - 1)) ) ;

    p->nscp = (struct ucontext  *) (struct ucontext  *) 0  ;
    p->sig = -1;
    p->context[5 ] = (int) pthread_fake_call_wrapper_wrapper;








    if (!(p->state & 0x8 ))
      pthread_q_wakeup_thread(((pthread_queue_t) 0 ) , p, 0 );
    
    return(1 );
  }

  return (0 );
}

 
 



static void handle_one_signal(sig, code)
int sig;
int code;
{
  register pthread_t p = pthread_kern.k_pthread_self ;
  struct itimerval it;
  struct timespec now;
  extern pthread_t pthread_q_all_find_receiver();
  static int aio_handle();

   










  if (p != ((pthread_t) 0)  &&
      (p->nscp == (struct ucontext  *) 0   ||
       pthread_not_called_from_sighandler(p->context[5 ])) &&
      (p = (pthread_t) code))
    code = 0;
  else if (p != ((pthread_t) 0)  && (*( &synchronous ) & ((unsigned int)1 << ((   sig  ) - 1)) ) )
     ;
# 610 "signal.c"

  else if (sig == 14 ) {



    if (

        pthread_timer.head != ((timer_ent_t) 0 )  && (p = pthread_timer.head->thread)






        ) {

       


      struct timeval now;

      gettimeofday(&now, (struct timezone *) 0 );
      if ((( p->tp ).tv_sec > (  now ).tv_sec || (( p->tp ).tv_sec == (  now ).tv_sec && ( p->tp ).tv_usec > (  now ).tv_usec)) ) {
        struct itimerval it;

        it.it_interval.tv_sec = it.it_interval.tv_usec = 0;
        do {  if ((  now ).tv_usec > (  p->tp ).tv_usec) { ( it.it_value ).tv_sec = (  p->tp ).tv_sec - (  now ).tv_sec - 1; ( it.it_value ).tv_usec = ((  p->tp ).tv_usec - (  now ).tv_usec) + 1000000; } else { ( it.it_value ).tv_sec = (  p->tp ).tv_sec - (  now ).tv_sec; ( it.it_value ).tv_usec = (  p->tp ).tv_usec - (  now ).tv_usec; } } while (0)  ;
        if (setitimer(0 , &it, (struct itimerval *) 0 ))
         {




         }



        return;
      }

      sig = 9  ;
    }
    else {



      return;  
    }
  }






  else if (sig == 18  ) {
    extern int wait_handle();
    wait_handle();
    return;
  }

  else if (!(p = pthread_q_all_find_receiver(& pthread_kern.k_all , sig))) {
    if (! (*( & pthread_kern.k_pending_signals  ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {
      (*( & pthread_kern.k_pending_signals  ) |= ((unsigned int)1 << ((   sig  ) - 1)) ) ;
      pending_code[sig] = code;
    }
    return;
  }
  
  if (p->state & 0x2 )
    return;
  
   




  if ((*( &p->mask ) & ((unsigned int)1 << ((   sig  ) - 1)) )  ||
      sig == (32 -1)  &&
      p->state & 0x200  && !(p->state & 0x400 )) {
    (*( &p->pending ) |= ((unsigned int)1 << ((   sig  ) - 1)) ) ;
    p->sig_info[sig].si_code = code;
    return;
  }

  if (handle_thread_signal(p, sig, code))
    return;
  
  default_action(sig);
}
  
 
 





pthread_t pthread_handle_many_process_signals()
{
  register int sig;

  static int aio_wait();


  do {
    while (pthread_signonemptyset(& pthread_kern.k_new_signals )) {
       


      pthread_p_sigprocmask (1 , & pthread_kern.k_all_signals , (struct sigset_t *) 0 );
      
      pthread_sigcpyset2set(&sig_handling, & pthread_kern.k_new_signals );
      pthread_sigdelset2set(& pthread_kern.k_new_signals , &sig_handling);
      
      pthread_p_sigprocmask (2 , & pthread_kern.k_all_signals , (struct sigset_t *) 0 );
       



      for (sig = 1; sig < 32 +1 ; sig++)
        if ((*( &sig_handling ) & ((unsigned int)1 << ((   sig  ) - 1)) ) )
          handle_one_signal(sig, new_code[sig]);
    }

     


    if (pthread_kern.k_ready .head == ((pthread_t) 0) ) {
      pthread_p_sigprocmask (1 , & pthread_kern.k_all_signals , (struct sigset_t *) 0 );
      if (!pthread_signonemptyset(& pthread_kern.k_new_signals )) {





	  if (pthread_kern.k_gnfds >0) {



             aio_wait();
          }
          else
             pthread_p_sigsuspend (& pthread_kern.k_no_signals );






      }
      pthread_p_sigprocmask (2 , & pthread_kern.k_all_signals , (struct sigset_t *) 0 );
    }

  } while (pthread_kern.k_ready .head == ((pthread_t) 0) );

  return(pthread_kern.k_ready .head);
}

 
 





void pthread_handle_one_process_signal(sig, code)
int sig;
int code;
{
  handle_one_signal(sig, code);

  if (pthread_signonemptyset(& pthread_kern.k_new_signals ) ||
      pthread_kern.k_ready .head == ((pthread_t) 0) )
    pthread_handle_many_process_signals();
}

 
 



void pthread_handle_pending_signals()
{
  pthread_t p = pthread_kern.k_pthread_self ;
  int sig;

   



  if (!pthread_siggeset2set(&p->mask, &p->pending))
    for (sig = 1; sig < 32 +1 ; sig++)
      if ((*( &p->pending ) & ((unsigned int)1 << ((   sig  ) - 1)) )  && ! (*( &p->mask ) & ((unsigned int)1 << ((   sig  ) - 1)) )  && 
          (sig != (32 -1)  || p->state & 0x400 )) {
        (*( &p->pending ) &= ~((unsigned int)1 << ((   sig  ) - 1)) ) ;
        
        handle_thread_signal(p, sig, p->sig_info[sig].si_code);
      }

   


  if (!pthread_siggeset2set(&p->mask, & pthread_kern.k_pending_signals ))
    for (sig = 1; sig < 32 +1 ; sig++)
      if ((*( & pthread_kern.k_pending_signals  ) & ((unsigned int)1 << ((   sig  ) - 1)) )  && ! (*( &p->mask ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {
        (*( & pthread_kern.k_pending_signals  ) &= ~((unsigned int)1 << ((   sig  ) - 1)) ) ;
        
        handle_thread_signal(p, sig, pending_code[sig]);
      }
}


 
 








static void sighandler(sig, sip, scp)
     struct siginfo *sip;
     struct ucontext  *scp;
# 846 "signal.c"

     int sig;
{
  register pthread_t p = pthread_kern.k_pthread_self ;








# 929 "signal.c"













  gtimeout = 0;





   


# 960 "signal.c"


  if (! (*( & pthread_kern.k_new_signals  ) & ((unsigned int)1 << ((   sig  ) - 1)) ) )



    if (! pthread_kern.k_is_in_kernel  && scp) {

      pthread_kern.k_is_in_kernel  = 1  ;

      p->terrno = errno;

      pthread_p_sigprocmask (2 , & pthread_kern.k_all_signals , (struct sigset_t *) 0 );

       


      p->scp = p->nscp;





      p->nscp = scp;


       









      errno = p->terrno;
      pthread_sched_wrapper(sig, (sip?sip->si_code:0) , p);
      do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;

    }
    else {
      (*( & pthread_kern.k_new_signals  ) |= ((unsigned int)1 << ((   sig  ) - 1)) ) ;
      new_code[sig] = (sip?sip->si_code:0) ;
      pthread_kern.k_state_change  = 1 ;
    }
# 1014 "signal.c"




}



int pthread_getfdtablesize()

{

  struct rlimit rl;
  getrlimit (5 , &rl);
  return rl.rlim_cur;



}


 
 


void pthread_init_signals()
{
  int sig;
  struct sigaction vec;
# 1055 "signal.c"


   


  pthread_kern.k_is_in_kernel  = pthread_kern.k_is_updating_timer  = 0 ;

  (*( &synchronous ) = (sigset_t) 0) ;
  (*( &synchronous ) |= ((unsigned int)1 << ((   4   ) - 1)) ) ;
  (*( &synchronous ) |= ((unsigned int)1 << ((   6   ) - 1)) ) ;

  (*( &synchronous ) |= ((unsigned int)1 << ((   7   ) - 1)) ) ;

  (*( &synchronous ) |= ((unsigned int)1 << ((   8   ) - 1)) ) ;
  (*( &synchronous ) |= ((unsigned int)1 << ((   10   ) - 1)) ) ;
  (*( &synchronous ) |= ((unsigned int)1 << ((   11   ) - 1)) ) ;
  
  (*( (sigset_t *) & pthread_kern.k_new_signals  ) = (sigset_t) 0) ;
  (*( & pthread_kern.k_pending_signals  ) = (sigset_t) 0) ;
  (*( & pthread_kern.k_handlerset  ) = (sigset_t) 0) ;
  (*( &sig_handling ) = (sigset_t) 0) ;

  (*( & pthread_kern.k_cantmask  ) = (sigset_t) 0) ;
  (*( & pthread_kern.k_cantmask  ) |= ((unsigned int)1 << ((   9   ) - 1)) ) ;
  (*( & pthread_kern.k_cantmask  ) |= ((unsigned int)1 << ((   23   ) - 1)) ) ;
  (*( & pthread_kern.k_cantmask  ) |= ((unsigned int)1 << ((   (32 -1)   ) - 1)) ) ;

  (*( & pthread_kern.k_all_signals  ) = (sigset_t) -1) ;
  (*( & pthread_kern.k_all_signals  ) &= ~((unsigned int)1 << ((   9   ) - 1)) ) ;
  (*( & pthread_kern.k_all_signals  ) &= ~((unsigned int)1 << ((   23   ) - 1)) ) ;

  (( & pthread_kern.k_ready  )->head = ( & pthread_kern.k_ready  )->tail = ((struct pthread *) 0 ) ) ;
  (( & pthread_kern.k_all  )->head = ( & pthread_kern.k_all  )->tail = ((struct pthread *) 0 ) ) ;



  (( &pthread_timer )->head = ( &pthread_timer )->tail = ((timer_ent_t) 0 ) ) ;

  pthread_kern.k_set_warning  = "CAUTION: entering kernel again\n";
  pthread_kern.k_clear_warning  = "CAUTION: leaving kernel again\n";
  pthread_kern.k_prio_warning  = "CAUTION: prio violation when leaving kernel\n";









   


  for (sig = 0; sig < 32 +1 ; sig++) {
    pthread_user_handler[sig]. _sa_function._sa_handler  = ((void(*)(int))  0) ;
    (*( &pthread_user_handler[sig].sa_mask ) = (sigset_t) 0) ;
    pthread_user_handler[sig].sa_flags = 0;
    new_code[sig] = 0;
  }

   



  vec. _sa_function._sa_handler  = sighandler;
  pthread_sigcpyset2set(&vec.sa_mask, & pthread_kern.k_all_signals );



  vec.sa_flags = 0x00008 | 0x00004 ;




    
  for (sig = 1; sig < 32 ; sig++)
    if (sig != 29  && ! (*( & pthread_kern.k_cantmask  ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {




      if (pthread_p_sigaction (sig, &vec, (struct sigaction *) 0 ))




          ;




    }




  pthread_kern.k_gnfds  = 0;
  pthread_kern.k_gmaxnfds  = pthread_getfdtablesize();




  pthread_kern.k_gafds [0] = (struct pollfd*)pthread_malloc(sizeof(struct pollfd)* pthread_kern.k_gmaxnfds );
  pthread_kern.k_gafds [1] = (struct pollfd*)pthread_malloc(sizeof(struct pollfd)* pthread_kern.k_gmaxnfds );




  pthread_kern.k_gfds  = pthread_kern.k_gafds [0];







}

 
 




int sigwait(set, sigp)
     int *sigp;
     const  sigset_t *set;
{
  register int sig;
  sigset_t new, more;
  register pthread_t p = pthread_kern.k_pthread_self ;

  pthread_sigcpyset2set(&new, set);
  pthread_sigdelset2set(&new, & pthread_kern.k_cantmask );
  pthread_sigcpyset2set(&more, &new);
  pthread_kern.k_is_in_kernel  = 1  ;

   


   


  if (!pthread_siggeset2set(&p->mask, &more)) {
    (errno = ( 22  )) ;
    do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
    return(-1);
  }


   


  if (pthread_sigismemberset2set(&p->pending, &more))
    for (sig = 1; sig < 32 +1 ; sig++)
      if ((*( &p->pending ) & ((unsigned int)1 << ((   sig  ) - 1)) )  && (*( &more ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {
        (*( &p->pending ) &= ~((unsigned int)1 << ((   sig  ) - 1)) ) ;
        do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
	*sigp = sig;
        return(0);
      }
    
   


  if (pthread_sigismemberset2set(& pthread_kern.k_pending_signals , &more))
    for (sig = 1; sig < 32 +1 ; sig++)
      if ((*( & pthread_kern.k_pending_signals  ) & ((unsigned int)1 << ((   sig  ) - 1)) )  && (*( &more ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {
        (*( & pthread_kern.k_pending_signals  ) &= ~((unsigned int)1 << ((   sig  ) - 1)) ) ;
        do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
	*sigp = sig;
        return(0);
      }
    
   


  pthread_sigaddset2set(&p->sigwaitset, &new);
  pthread_sigdelset2set(&p->mask, &new);
  p->state &= ~0x8 ;
  p->state |= 0x40  | 0x10  | 0x400 ;
  if ((*( &p->pending ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) )  && ! (*( &p->mask ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) ) )
    do {  if(! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_handle_pending_signals_wrapper(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } while (0)  ;
  else {
    pthread_q_deq_head(& pthread_kern.k_ready , 0 );
     ;
    do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
  }

  if ((errno)  == 4 )
    return(-1);

   


  for (sig = 1; sig < 32 +1 ; sig++)
    if ((*( &new ) & ((unsigned int)1 << ((   sig  ) - 1)) )  && ! (*( &p->sigwaitset ) & ((unsigned int)1 << ((   sig  ) - 1)) ) )
      break;

   


  pthread_kern.k_is_in_kernel  = 1  ;
  (*( &p->sigwaitset ) = (sigset_t) 0) ;
  do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;

   



  if (sig < 0) {
    (errno = ( 22  )) ;
    return(-1);
  }

  *sigp = sig;
  return(0);
}

 
 




int sigprocmask(how, set, oset)
int how;
const  sigset_t *set;
sigset_t *oset;
{
  sigset_t new, old, pending;
  register pthread_t p = pthread_kern.k_pthread_self ;
  register already_in_kernel = pthread_kern.k_is_in_kernel ;






  if (!already_in_kernel)
    pthread_kern.k_is_in_kernel  = 1  ;

  pthread_sigcpyset2set(&old, &p->mask);
  if (oset)
    pthread_sigcpyset2set(oset, &old);
  if (!set) {
    if (!already_in_kernel)
      do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
    return(0);
  }

  pthread_sigcpyset2set(&new, set);
  pthread_sigdelset2set(&new, & pthread_kern.k_cantmask );

  switch (how) {
  case 1 :
    pthread_sigaddset2set(&p->mask, &new);
    break;
  case 2 :
    pthread_sigdelset2set(&p->mask, &new);
    break;
  case 0 :
    pthread_sigcpyset2set(&p->mask, &new);
    break;
  default:
    (errno = ( 22  )) ;
    if (!already_in_kernel)
      do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
    return(-1);
  }

  pthread_sigcpyset2set(&pending, &p->pending);
  pthread_sigaddset2set(&pending, & pthread_kern.k_pending_signals );
  pthread_sigdelset2set(&old, &p->mask);
  if (pthread_sigismemberset2set(&pending, &old))
    do {  if(! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_handle_pending_signals_wrapper(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } while (0)  ;
  else {
     ;
    if (!already_in_kernel)
      do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
  }
  return(0);
}

 
 




int sigpending(set)
sigset_t *set;
{
  if (!set) {
    (errno = ( 22  )) ;
    return(-1);
  }

   ;
  pthread_sigcpyset2set(set, & pthread_kern.k_pthread_self ->pending);
  pthread_sigaddset2set(set, & pthread_kern.k_pending_signals );
  pthread_sigdelset2set(set, & pthread_kern.k_cantmask );
  return(0);
}

 
 






int sigsuspend(set)
const  sigset_t *set;
{
  register int sig;
  sigset_t old, pending;
  register pthread_t p = pthread_kern.k_pthread_self ;

  if (!set) {
    (errno = ( 22  )) ;
    return(-1);
  }

  pthread_kern.k_is_in_kernel  = 1  ;
  pthread_sigcpyset2set(&old, &p->mask);
  pthread_sigcpyset2set(&p->mask, set);
  pthread_sigdelset2set(&p->mask, & pthread_kern.k_cantmask );
  pthread_sigaddset2set(&p->sigwaitset, &p->mask);

  p->state &= ~0x8 ;
  p->state |= 0x100  | 0x10  | 0x400 ;
  if ((*( &p->pending ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) )  && ! (*( &p->mask ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) ) )
    do {  if(! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_handle_pending_signals_wrapper(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } while (0)  ;
  else {
    pthread_q_deq_head(& pthread_kern.k_ready , 0 );
     ;
    do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
  }

   


  pthread_kern.k_is_in_kernel  = 1  ;
  pthread_sigcpyset2set(&p->mask, &old);

  pthread_sigcpyset2set(&pending, &p->pending);
  pthread_sigaddset2set(&pending, & pthread_kern.k_pending_signals );
  pthread_sigcpyset2set(&old, set);
  pthread_sigdelset2set(&old, & pthread_kern.k_cantmask );
  pthread_sigdelset2set(&old, &p->mask);
  if (pthread_sigismemberset2set(&pending, &old))
    do {  if(! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_handle_pending_signals_wrapper(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } while (0)  ;
  else
    do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;

  return(-1);
}

 
 



int pause()
{
  register int sig;
  register pthread_t p = pthread_kern.k_pthread_self ;

  pthread_kern.k_is_in_kernel  = 1  ;
  pthread_sigcpyset2set(&p->sigwaitset, &p->mask);
  
  p->state &= ~0x8 ;
  p->state |= 0x100  | 0x10  | 0x400 ;
  if ((*( &p->pending ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) )  && ! (*( &p->mask ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) ) )
    do {  if(! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_handle_pending_signals_wrapper(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } while (0)  ;
  else {
    pthread_q_deq_head(& pthread_kern.k_ready , 0 );
     ;
    do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
  }
  
  return(-1);
}

# 1558 "signal.c"


 
 




int pthread_timed_sigwait(p, timeout, mode, func, arg)
     pthread_t p;
     struct timespec *timeout;
     int mode;
     pthread_func_t func;
     any_t arg;
{
  struct itimerval it;
  struct timeval now, in;
  register timer_ent_t phead;






  if (p->num_timers >= 128 +2 )
   {



    return(11 );
   }

  if (mode != 0x04 ) {

    if (!timeout || timeout-> tv_nsec  < 0 || timeout-> tv_nsec  >= 1000000000)
     {



      return(22 );
     }
    do {  ( in ).tv_sec = (  (*timeout) ). tv_sec ; ( in ).tv_usec = (  (*timeout) ). tv_nsec  / 1000; } while (0)  ;

  }


  if (gettimeofday(&now, (struct timezone *) 0 ))
   {



      return(22 );
   }

  it.it_interval.tv_sec = it.it_interval.tv_usec = 0;

  if (mode == 0x01 ) {
     


    if ((( now ).tv_sec > (  in ).tv_sec || (( now ).tv_sec == (  in ).tv_sec && ( now ).tv_usec >= (  in ).tv_usec)) )
     {



      return(11 );
     }

    do {  if ((  now ).tv_usec > (  in ).tv_usec) { ( it.it_value ).tv_sec = (  in ).tv_sec - (  now ).tv_sec - 1; ( it.it_value ).tv_usec = ((  in ).tv_usec - (  now ).tv_usec) + 1000000; } else { ( it.it_value ).tv_sec = (  in ).tv_sec - (  now ).tv_sec; ( it.it_value ).tv_usec = (  in ).tv_usec - (  now ).tv_usec; } } while (0)  ;
  }
  else if (mode == 0x02 ) {
     


    if ((( in ).tv_sec < 0 || (( in ).tv_sec == 0 && ( in ).tv_usec <= 0)) )
     {



      return(11 );
     }

    it.it_value.tv_sec = in.tv_sec;
    it.it_value.tv_usec = in.tv_usec;
    do {  if (1000000 - (  now ).tv_usec <= (  in ).tv_usec) { ( in ).tv_sec = (  in ).tv_sec + (  now ).tv_sec + 1; ( in ).tv_usec = -1000000 + (  in ).tv_usec + (  now ).tv_usec; } else { ( in ).tv_sec = (  in ).tv_sec + (  now ).tv_sec; ( in ).tv_usec = (  in ).tv_usec + (  now ).tv_usec; } } while (0)  ;
  }

  else if (mode == 0x04 ) {
    p->state |= 0x800 ;
    if ((p->interval.tv_sec == 0) && (p->interval.tv_usec == 0)) {
      in.tv_sec = it.it_value.tv_sec = 0;
      in.tv_usec = it.it_value.tv_usec = 20000 ;
    }
    else {
      in.tv_sec = it.it_value.tv_sec = p->interval.tv_sec; 
      in.tv_usec = it.it_value.tv_usec = p->interval.tv_usec;
    }
    do {  if (1000000 - (  now ).tv_usec <= (  in ).tv_usec) { ( in ).tv_sec = (  in ).tv_sec + (  now ).tv_sec + 1; ( in ).tv_usec = -1000000 + (  in ).tv_usec + (  now ).tv_usec; } else { ( in ).tv_sec = (  in ).tv_sec + (  now ).tv_sec; ( in ).tv_usec = (  in ).tv_usec + (  now ).tv_usec; } } while (0)  ;
  }

  else
   {



    return(22 );
   }

   



  if (!(phead = pthread_timer.head) || (( phead->tp ).tv_sec > (  in ).tv_sec || (( phead->tp ).tv_sec == (  in ).tv_sec && ( phead->tp ).tv_usec > (  in ).tv_usec)) ) {
    it.it_interval.tv_sec = it.it_interval.tv_usec = 0;
    if (setitimer(0 , &it, (struct itimerval *) 0 )) {




      ((void)(( 0  ) || (__kassert("FALSE", "signal.c", 1677), 0))) ;
      return(22 );
    }




  }




    
   


  return pthread_q_timed_enq(&pthread_timer,
                      in,
                      func == (pthread_func_t) pthread_exit ? 0x08  : mode,
                      p);
}

 
 






int pthread_cancel_timed_sigwait(first_p, signaled, mode, activate)
     pthread_t first_p;
     int signaled, mode, activate;
{
  pthread_t p = first_p;
  timer_ent_t tmr;
  timer_ent_t old_tmr_head = pthread_timer.head;
  struct itimerval it;
  struct timeval now;
  int time_read = 0 ;

  int recalculate = 0;
  static int aio_calculate();


  if (gettimeofday(&now, (struct timezone *) 0 )) {



     ((void)(( 0  ) || (__kassert("FALSE", "signal.c", 1726), 0))) ;
     return(22 );
  }

   



  for (tmr = pthread_timer.head; tmr; tmr = tmr->next[0 ])
    if (tmr->thread == p && (tmr->mode & mode))
      break;




  if (!tmr) {



    return(0);
  }

   


  do {

    if (tmr->mode == 0x04 ) {
      ((void)(( p->state & 0x800  ) || (__kassert("p->state & T_ASYNCTIMER", "signal.c", 1754), 0))) ;
      p->state &= ~0x800 ;
      if ((( tmr->tp ).tv_sec > (  now ).tv_sec || (( tmr->tp ).tv_sec == (  now ).tv_sec && ( tmr->tp ).tv_usec > (  now ).tv_usec)) )
	do {  if ((  now ).tv_usec > (  tmr->tp ).tv_usec) { ( p->interval ).tv_sec = (  tmr->tp ).tv_sec - (  now ).tv_sec - 1; ( p->interval ).tv_usec = ((  tmr->tp ).tv_usec - (  now ).tv_usec) + 1000000; } else { ( p->interval ).tv_sec = (  tmr->tp ).tv_sec - (  now ).tv_sec; ( p->interval ).tv_usec = (  tmr->tp ).tv_usec - (  now ).tv_usec; } } while (0)  ;
      else
	p->interval.tv_usec = p->interval.tv_sec = 0;
      pthread_q_timer_deq(&pthread_timer, tmr);
    }
    else if (p->state & 0x20 ) {



      p->state &= ~(0x20  | 0x80 );
      pthread_q_deq(p->queue, p, 0 );




      pthread_q_timed_wakeup_thread(0 , p, 
                      ((p == first_p && (tmr->mode & mode)) ? activate : 1 ));
      pthread_q_timer_deq(&pthread_timer, tmr);

      if (p != first_p || signaled) {
        p->terrno = 11 ;




        if (p == pthread_kern.k_pthread_self )
          (errno = ( 11  )) ;
      }
    } 
    else if (p->state & 0x80 ) {
      p->state &= ~0x80 ;




      pthread_q_timed_wakeup_thread(0 , p,
                     ((p == first_p && (tmr->mode & mode)) ? activate : 1 ));
      pthread_q_timer_deq(&pthread_timer, tmr);


      if ((*( &p->sigwaitset ) & ((unsigned int)1 << ((   23    ) - 1)) ) ) {
       p->wait_on_select = 0;
       p->how_many = 0;
       p->terrno = 0;
       if (p== pthread_kern.k_pthread_self )
        (errno = ( 0 )) ; 
       recalculate++;
       (*( &p->sigwaitset ) &= ~((unsigned int)1 << ((   23    ) - 1)) ) ;
      }

     }
    else
     {

       kprintf("pthread_cancel_timed_sigwait: thread=%d state=%x mode=%x\n", p, p->state,tmr->mode);



       ((void)(( 0  ) || (__kassert("FALSE", "signal.c", 1815), 0))) ;
     }


     


    if (!time_read && mode == (0x10 | ((0x01  | 0x02 )  | 0x04  | 0x08 ) ) ) {
      tmr = pthread_timer.head;
      while (tmr && tmr->thread != p)
        tmr = tmr->next[0 ];
    }
    else
      tmr = ((timer_ent_t) 0 ) ;

     


    if (tmr == ((timer_ent_t) 0 )  && !time_read)



      time_read = 1 ;

    if (time_read) {
      tmr = pthread_timer.head;

      if (tmr)
        p = tmr->thread;



    }
      
  } while (tmr && (!time_read || (( now ).tv_sec > (  tmr->tp ).tv_sec || (( now ).tv_sec == (  tmr->tp ).tv_sec && ( now ).tv_usec >= (  tmr->tp ).tv_usec)) ));

   



  if (recalculate)
   aio_calculate();


   


  if (tmr == old_tmr_head) {



    return(0);
  }

   


  (*( & pthread_kern.k_new_signals  ) &= ~((unsigned int)1 << ((   14   ) - 1)) ) ;

   


  if (tmr != ((timer_ent_t) 0 ) )
    do {  if ((  now ).tv_usec > (  tmr->tp ).tv_usec) { ( it.it_value ).tv_sec = (  tmr->tp ).tv_sec - (  now ).tv_sec - 1; ( it.it_value ).tv_usec = ((  tmr->tp ).tv_usec - (  now ).tv_usec) + 1000000; } else { ( it.it_value ).tv_sec = (  tmr->tp ).tv_sec - (  now ).tv_sec; ( it.it_value ).tv_usec = (  tmr->tp ).tv_usec - (  now ).tv_usec; } } while (0)  ;
  else
    it.it_value.tv_sec = it.it_value.tv_usec = 0;

  it.it_interval.tv_sec = it.it_interval.tv_usec = 0;
  if (setitimer(0 , &it, (struct itimerval *) 0 )) {



    ((void)(( 0  ) || (__kassert("FALSE", "signal.c", 1887), 0))) ;
    return(22 );
  }










  
  return(0);
}



 
 










int raise(sig)
int sig;
{
  pthread_kern.k_is_in_kernel  = 1  ;
   ;

  if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) )

    pthread_signal_sched(sig, (int) ((pthread_t) 0) );


  do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;


  return(0);
}

 
 


int pthread_kill(thread, sig)
pthread_t thread;
int sig;
{
  if (thread == ((pthread_t) 0)  || thread->state & 0x2  ||
      (*( & pthread_kern.k_cantmask  ) & ((unsigned int)1 << ((   sig  ) - 1)) )  || ! (*( & pthread_kern.k_all_signals  ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {

    (errno = ( 22  )) ;
    return (-1);



  }

   


  pthread_kern.k_is_in_kernel  = 1  ;
   ;

  if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) )

    pthread_signal_sched(sig, (int) thread);


  do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;


  return(0);
}

 
 




int pthread_cancel(thread)
pthread_t thread;
{
  if (thread == ((pthread_t) 0)  || thread->state & 0x2 )
   {

    (errno = ( 22  )) ;
    return (-1);



   }

   


  pthread_kern.k_is_in_kernel  = 1  ;
   ;

  if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) )

    pthread_signal_sched((32 -1) , (int) thread);


  do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;


  return(0);
}

 
 


int pthread_setintr(state)
     int state;
{
  int old;
  sigset_t new;

  if (state != 2   && state != 1  )
   {

    (errno = ( 22  )) ;
    return (-1);



   }
  
   ;
  old = ((*( & pthread_kern.k_pthread_self ->mask ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) )  ?
         1   : 2  );
  (*( &new ) = (sigset_t) 0) ;
  (*( &new ) |= ((unsigned int)1 << ((   (32 -1)   ) - 1)) ) ;
  if (sigprocmask(state, &new, (sigset_t *) 0 ) == 0)
    return(old);
  else
    return(-1);
}

 
 


int pthread_setintrtype(type)
     int type;
{
  register pthread_t p = pthread_kern.k_pthread_self ;
  int old;
  
  old = (p->state & 0x200  ?
         0  : 1 );
  switch (type) {
  case 0 :
    pthread_kern.k_is_in_kernel  = 1  ;
    p->state |= 0x200 ;
     ;
    do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
    return(old);
  case 1 :
    pthread_kern.k_is_in_kernel  = 1  ;
    p->state &= ~0x200 ;
    if ((*( &p->pending ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) )  &&
        ! (*( &p->mask ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) ) ) {
      p->state |= 0x400 ;
      do {  if(! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_handle_pending_signals_wrapper(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } while (0)  ;
    }
    else {
       ;
      do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
    }
    return(old);
  default:

    (errno = ( 22  )) ;
    return (-1);



  }
}

 
 


void pthread_testintr()
{
  register pthread_t p = pthread_kern.k_pthread_self ;

  pthread_kern.k_is_in_kernel  = 1  ;
  if ((*( &p->pending ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) )  &&
      ! (*( &p->mask ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) ) ) {
    p->state |= 0x400 ;
    do {  if(! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_handle_pending_signals_wrapper(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } while (0)  ;
  }
  else {
     ;
    do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
  }
}





 
 






int _sigaction(sig, act, oact)



int sig;
const  struct sigaction *act;
struct sigaction *oact;
{
  register pthread_t p = pthread_kern.k_pthread_self ;
  struct sigaction vec;

# 2154 "signal.c"


# 2165 "signal.c"


  if (sig == 29 )
    return(pthread_p_sigaction (sig, act, oact));

  if ((*( & pthread_kern.k_cantmask  ) & ((unsigned int)1 << ((   sig  ) - 1)) )  || ! (*( & pthread_kern.k_all_signals  ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {
    (errno = ( 22  )) ;
    return(-1);
  }

  if (!act) {
    if (oact)
      *oact = pthread_user_handler[sig];
    return(0);
  }

  if (pthread_sigismemberset2set(&act->sa_mask, & pthread_kern.k_cantmask )) {
    (errno = ( 22  )) ;
    return(-1);
  }

  pthread_kern.k_is_in_kernel  = 1  ;
  if (oact)
    *oact = pthread_user_handler[sig];

  pthread_user_handler[sig] = *act;

   


  if (! (*( & pthread_kern.k_handlerset  ) & ((unsigned int)1 << ((   sig  ) - 1)) ) )
    (*( & pthread_kern.k_handlerset  ) |= ((unsigned int)1 << ((   sig  ) - 1)) ) ;

   



  if (act-> _sa_function._sa_handler  == ((void(*)(int))  1)  || act-> _sa_function._sa_handler  == ((void(*)(int))  0) ) {
    if ((*( & pthread_kern.k_pending_signals  ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {
      (*( & pthread_kern.k_pending_signals  ) &= ~((unsigned int)1 << ((   sig  ) - 1)) ) ;
      if (act-> _sa_function._sa_handler  == ((void(*)(int))  0) )
        default_action(sig);
    }

    for (p = pthread_kern.k_all .head; p; p = p->next[1 ])
      if ((*( &p->pending ) & ((unsigned int)1 << ((   sig  ) - 1)) ) ) {
        (*( &p->pending ) &= ~((unsigned int)1 << ((   sig  ) - 1)) ) ;
        if (act-> _sa_function._sa_handler  == ((void(*)(int))  0) )
          default_action(sig);
      }
  }


   



  if (sig == 18  ) {
    vec. _sa_function._sa_handler  = act-> _sa_function._sa_handler ;
    vec.sa_mask = act->sa_mask;
    vec.sa_flags = 

      (act->sa_flags & 0x00001  ? 0x00001  : 0);






    pthread_p_sigaction (sig, &vec, (struct sigaction *) 0 );
  }





   ;

  do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;

  return(0);
}


int sigaction(sig, act, oact)
int sig;
const  struct sigaction *act;
struct sigaction *oact;

{
   return _sigaction(sig, act, oact);
}



int _sigrelse(sig)
int sig;

{
    sigset_t mask;
    (*( &mask ) = (sigset_t) 0) ;
    (*( &mask ) |= ((unsigned int)1 << ((   sig  ) - 1)) ) ;
    return sigprocmask(2 ,&mask,0 );
}

int _sighold(sig)
int sig;

{
    sigset_t mask;
    (*( &mask ) = (sigset_t) 0) ;
    (*( &mask ) |= ((unsigned int)1 << ((   sig  ) - 1)) ) ;
    return sigprocmask(1 ,&mask,0 );
}




pthread_sighandler_t sigset(sig,handler)
     int sig;
     pthread_sighandler_t handler;
{
    return signal(sig, handler);
}



 
 


pthread_sighandler_t signal(sig, handler)
     int sig;
     pthread_sighandler_t handler;
{
  struct sigaction act;

  act. _sa_function._sa_handler  = handler;



  act.sa_mask = 0;


  act.sa_flags = 0  | 0 ;







  if (!sigaction(sig, &act, (struct sigaction *) 0 ))
    return(handler);
  else
    return((pthread_sighandler_t)- (errno) );
}


 
 


int pthread_absnanosleep(rqtp)
const struct timespec *rqtp;
{
  register pthread_t p = pthread_kern.k_pthread_self ;
  struct timespec rmtp;



  timer_ent_t tmr;
  struct timeval now;

 
  rmtp. tv_sec  = rqtp-> tv_sec ;
  rmtp. tv_nsec  = rqtp-> tv_nsec ;

  do {
    int error;
    pthread_kern.k_is_in_kernel  = 1  ;
    
    if ((error=pthread_timed_sigwait(p, &rmtp, 0x01 , 0 , 0 ))) {
      do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
      return(error);
    }

     


    (errno = ( 0 )) ;
    
    p->state &= ~0x8 ;
    p->state |= 0x10  | 0x80  | 0x400 ;
    if ((*( &p->pending ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) )  &&
        ! (*( &p->mask ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) ) )
      do {  if(! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_handle_pending_signals_wrapper(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } while (0)  ;
    else {
      pthread_q_deq_head(& pthread_kern.k_ready , 0 );
       ;
      do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
    }
    
     


    if ((errno)  == 4 ) {








      if (gettimeofday(&now, (struct timezone *) 0 ))
        return(22 );

      pthread_kern.k_is_in_kernel  = 1  ;

      if (tmr = pthread_timer.head) {
        while (tmr->thread != p)
          tmr = tmr->next[0 ];



    
        if ((( tmr->tp ).tv_sec > (  now ).tv_sec || (( tmr->tp ).tv_sec == (  now ).tv_sec && ( tmr->tp ).tv_usec > (  now ).tv_usec)) ) {
          do {  if ((  now ).tv_usec > (  tmr->tp ).tv_usec) { ( now ).tv_sec = (  tmr->tp ).tv_sec - (  now ).tv_sec - 1; ( now ).tv_usec = ((  tmr->tp ).tv_usec - (  now ).tv_usec) + 1000000; } else { ( now ).tv_sec = (  tmr->tp ).tv_sec - (  now ).tv_sec; ( now ).tv_usec = (  tmr->tp ).tv_usec - (  now ).tv_usec; } } while (0)  ;
          do {  ( (rmtp) ). tv_sec  = (  now ).tv_sec; ( (rmtp) ). tv_nsec  = (  now ).tv_usec * 1000; } while (0)  ;
        }
      }
      do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;

    }
    else
      ( rmtp ). tv_sec  = ( rmtp ). tv_nsec  = 0 ;
  } while (! (( rmtp ). tv_sec  < 0 || (( rmtp ). tv_sec  == 0 && ( rmtp ). tv_nsec  <= 0)) );

  return(0);
}

 
 



int nanosleep(rqtp, rmtp)
const struct timespec *rqtp;
struct timespec *rmtp;
{
  register pthread_t p = pthread_kern.k_pthread_self ;



  timer_ent_t tmr;
  struct timeval now;

 
  if (rmtp)
    rmtp-> tv_sec  = rmtp-> tv_nsec  = 0;

  pthread_kern.k_is_in_kernel  = 1  ;
  if ((errno = ( pthread_timed_sigwait(p, rqtp, 0x02 , 0 , 0 ) )) ) {
    do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
    return(-1);
  }

   


  (errno = ( 0 )) ;

  p->state &= ~0x8 ;
  p->state |= 0x10  | 0x80  | 0x400 ;
  if ((*( &p->pending ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) )  &&
      ! (*( &p->mask ) & ((unsigned int)1 << ((   (32 -1)   ) - 1)) ) )
    do {  if(! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_handle_pending_signals_wrapper(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } while (0)  ;
  else {
    pthread_q_deq_head(& pthread_kern.k_ready , 0 );
     ;
    do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
  }

   


  if ((errno)  == 4 ) {
# 2461 "signal.c"

    if (gettimeofday(&now, (struct timezone *) 0 )) {
      (errno = ( 22  )) ;
      return(-1);
    }

    pthread_kern.k_is_in_kernel  = 1  ;

    if (tmr = pthread_timer.head) {
      while (tmr->thread != p)
        tmr = tmr->next[0 ];



      if ((( tmr->tp ).tv_sec > (  now ).tv_sec || (( tmr->tp ).tv_sec == (  now ).tv_sec && ( tmr->tp ).tv_usec > (  now ).tv_usec)) ) {
        if (rmtp) {
          do {  if ((  now ).tv_usec > (  tmr->tp ).tv_usec) { ( now ).tv_sec = (  tmr->tp ).tv_sec - (  now ).tv_sec - 1; ( now ).tv_usec = ((  tmr->tp ).tv_usec - (  now ).tv_usec) + 1000000; } else { ( now ).tv_sec = (  tmr->tp ).tv_sec - (  now ).tv_sec; ( now ).tv_usec = (  tmr->tp ).tv_usec - (  now ).tv_usec; } } while (0)  ;
          do {  ( (*rmtp) ). tv_sec  = (  now ).tv_sec; ( (*rmtp) ). tv_nsec  = (  now ).tv_usec * 1000; } while (0)  ;
        }
        do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;
        return(-1);
      }
    }
    do {  pthread_kern.k_is_in_kernel  = 0 ; if (pthread_kern.k_state_change ) { pthread_kern.k_is_in_kernel  = 1 ; if ((pthread_signonemptyset(& pthread_kern.k_new_signals ) || pthread_kern.k_pthread_self  != pthread_kern.k_ready .head) && ! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; while (pthread_signonemptyset(& pthread_kern.k_new_signals )) { pthread_kern.k_is_in_kernel  = 1 ; pthread_sched_new_signals(pthread_kern.k_pthread_self , 1 ); if (! (((( pthread_kern.k_pthread_self  )->terrno = errno),1) && pthread_sigsetjmp (( pthread_kern.k_pthread_self  )->context, 0 , 1 ) && ((errno = ( pthread_kern.k_pthread_self  )->terrno),1)) ) pthread_sched(); pthread_kern.k_state_change  = 0 ; pthread_kern.k_is_in_kernel  = 0 ; } } } while (0)   ;

  }

  return(0);
}

 
 


unsigned int sleep(seconds)
unsigned int seconds;
{
  struct timespec rqtp, rmtp;

  if (rqtp. tv_sec  = seconds) {
    rqtp. tv_nsec  = 0;
    nanosleep(&rqtp, &rmtp);
    if ((errno)  == 4 )
      return(rmtp. tv_sec  + (rmtp. tv_nsec  ? 1 : 0));  
  }
  return(0);
}

# 2538 "signal.c"


 
 


int clock_gettime(clock_id, tp)
int clock_id;
struct timespec *tp;
{
  struct timeval now;

  if (clock_id != 0  || !tp ||
      gettimeofday(&now, (struct timezone *) 0 )) {
    (errno = ( 22  )) ;
    return(-1);
  }

  do {  ( (*tp) ). tv_sec  = (  now ).tv_sec; ( (*tp) ). tv_nsec  = (  now ).tv_usec * 1000; } while (0)  ;
  return(0);
}





# 2644 "signal.c"


 
 


static int fds_update(nfds, fds, cnfds, cfds)
     int nfds;
     struct pollfd* fds;
     int cnfds;
     struct pollfd* cfds;
{
  register int i, j;
  int result = 0;
  
  for (i=0; i < nfds; i++)
   {
      fds[i].revents = 0;
      for (j=0; j<cnfds; j++) 
       {
          if (cfds[j].revents!=0 && cfds[j].fd==fds[i].fd)
           {
             fds[i].revents = ((fds[i].events| 0x0008 | 0x0010 | 0x0020 )&cfds[j].revents);
             if (fds[i].revents!=0)
              {



                result++;
              }
             break;
           }
       }
   }
 
  return(result);
}



# 2890 "signal.c"




 
 


void gpoll_fds_union(nfds, fds)
     int nfds;
     struct pollfd fds[];
{
  register int i, j;

  for (i = 0; i < nfds; i++)
   {
     for (j=0; j< pthread_kern.k_gnfds ; j++)
      {
        if (pthread_kern.k_gfds [j].fd==fds[i].fd)
           {
             pthread_kern.k_gfds [j].events |= fds[i].events;
             goto next;
           }
      }
     ((void)(( pthread_kern.k_gmaxnfds != pthread_kern.k_gnfds  ) || (__kassert("gmaxnfds!=gnfds", "signal.c", 2914), 0))) ;
      pthread_kern.k_gfds [pthread_kern.k_gnfds ].fd = fds[i].fd;
      pthread_kern.k_gfds [pthread_kern.k_gnfds ].events = fds[i].events;
      pthread_kern.k_gfds [pthread_kern.k_gnfds ].revents = 0;
      pthread_kern.k_gnfds ++;
next:
   }
}

 
 





static int aio_calculate()
{
  register pthread_t p;
  register int count = 0;

   


 
  pthread_kern.k_gnfds  = 0;
  for(p = pthread_kern.k_all .head; p; p = p->next[1 ]) {
    if ((*( &p->sigwaitset ) & ((unsigned int)1 << ((   23    ) - 1)) ) )
      if (p->wait_on_select) {
        if (pthread_kern.k_gnfds  == 0) {
          pthread_kern.k_gnfds  = p->nfds;
	  memcpy(pthread_kern.k_gfds , p->fds, p->nfds * sizeof(struct pollfd));
        }
	else {
          gpoll_fds_union(p->nfds, p->fds);
	}
      }
     else {
        count++;
      }
  }

  return (count);
}

 
 





static int aio_select(int timeout, int unblock)
{
  register pthread_t p = pthread_kern.k_pthread_self ;
  int cnfds;
  int i, count = 0;
  struct pollfd* cfds;
  static int aio_calculate();

  if (pthread_kern.k_gnfds  == 0)
   {



     return 0;
   }

  gtimeout = timeout;

  if (unblock)
     pthread_p_sigprocmask (2 , & pthread_kern.k_all_signals , (struct sigset_t *) 0 );

   





  i= pthread_p_poll (pthread_kern.k_gfds , pthread_kern.k_gnfds , gtimeout);



  if (unblock)
     pthread_p_sigprocmask (1 , & pthread_kern.k_all_signals , (struct sigset_t *) 0 );

  if (pthread_signonemptyset(& pthread_kern.k_new_signals ))
   return 0;

  switch(i) {
  case 0:
     return 0;     
  case -1:
     switch(errno)
     {
     case 4 :

     case 152 :




          return 0;
     case 22 :
     case 14 :
     case 11 :
     default:



	  return 0;
     }
  default:
     break;
  }

   


 
  cnfds = pthread_kern.k_gnfds ;
  cfds = pthread_kern.k_gfds ;
  pthread_kern.k_gnfds  = 0;
  if (pthread_kern.k_gfds  == pthread_kern.k_gafds [0])
   pthread_kern.k_gfds  = pthread_kern.k_gafds [1];
  else
   pthread_kern.k_gfds  = pthread_kern.k_gafds [0];
  for(p = pthread_kern.k_all .head; p; p = p->next[1 ]) {
    if ((*( &p->sigwaitset ) & ((unsigned int)1 << ((   23    ) - 1)) ) )
      if (p->wait_on_select)
       {
        p->how_many = fds_update(p->nfds, p->fds, cnfds, cfds);
        if (p->how_many > 0)
         {



           p->wait_on_select = 0 ;
           (*( &p->sigwaitset ) &= ~((unsigned int)1 << ((   23    ) - 1)) ) ;
           if (p->state & 0x80 )
             pthread_cancel_timed_sigwait(p, 0 , (0x01  | 0x02 ) , 1 );
           else
             pthread_q_wakeup_thread(((pthread_queue_t) 0 ) , p, 0 );
	   count++;
         }
       }
      else
       {
         p->how_many = 0;
         (*( &p->sigwaitset ) &= ~((unsigned int)1 << ((   23    ) - 1)) ) ;
         if (p->state & 0x80 )
          pthread_cancel_timed_sigwait(p, 0 , (0x01  | 0x02 ) , 1 );
         else
          pthread_q_wakeup_thread(((pthread_queue_t) 0 ) , p, 0 );
	 count++;
       }
  }

  aio_calculate();
  return (count);
}

 
 




static int aio_poll()

{
   return aio_select(0, 0 );
}

 




static int aio_wait()

{
   int timeout;
   struct itimerval it;
   if (!getitimer(0 , &it) && (( &it.it_value )->tv_sec > 0 || ( &it.it_value )->tv_usec > 0) )
     timeout = it.it_value.tv_sec * 1000
	     + it.it_value.tv_usec / 1000;
   else
    timeout = 86400000;
   return aio_select(timeout, 1 );
}



# 3223 "signal.c"



 


 
 


unsigned int alarm(seconds)
     unsigned int seconds;
{
  (errno = ( 89  )) ;
  return(-1);
}



 
 




void pthread_setsigcontext_np(scp, environment , val)
     struct ucontext  *scp;
     jmp_buf environment ;
     int val;
{
  scp-> uc_mcontext.regs[14 ]  = environment [5 ];









  scp-> uc_mcontext.regs[17 ]  = environment [4 ];
  if (environment [6 ])
    pthread_sigcpyset2set(&scp-> uc_sigmask , & environment [7 ]);  



}


 
 


int pthread_p_sigprocmask (how, set, oset)
int how;
const sigset_t *set;
sigset_t *oset;
{



  sigset_t old;



  pthread_sigprocmask  (how, 0 , & pthread_kern.k_proc_mask );





  if (oset)
    pthread_sigcpyset2set(oset, & pthread_kern.k_proc_mask );

  if (!set)
    return(0);

  switch (how) {
  case 1 :
    pthread_sigaddset2set(& pthread_kern.k_proc_mask , set);
    break;
  case 2 :
    pthread_sigdelset2set(& pthread_kern.k_proc_mask , set);
    break;
  case 0 :
    pthread_sigcpyset2set(& pthread_kern.k_proc_mask , set);
    break;
  default:
    (errno = ( 22  )) ;
    return(-1);
  }

  pthread_sigdelset2set(& pthread_kern.k_proc_mask , & pthread_kern.k_cantmask );


  pthread_sigprocmask  (0 , & pthread_kern.k_proc_mask , 0 );




  
  return(0);

}

 
 


int pthread_p_sigaction (sig, act, oact)
int sig;
const struct sigaction *act;
struct sigaction *oact;
{













  return(pthread_sigaction  (sig, act, oact));









}

 
 


int pthread_p_sigsuspend (set)
sigset_t *set;
{





  return (pthread_sigsuspend  (set));







}


 
 


int pthread_p_accept (s, addr, addrlen)
     int s;
     struct sockaddr *addr;
     int *addrlen;
{








  struct socksysreq req;

  req.args[0] = 1 ;
  req.args[1] = (int)s;
  req.args[2] = (int)addr;
  req.args[3] = (int)addrlen;

  return(ioctl(s, (0x80000000 |((sizeof(  struct socksysreq )& 0x7f )<<16)|( 'I' <<8)|  66 )  , &req));
# 3425 "signal.c"

}


 
 


int pthread_p_connect (s, addr, addrlen)
     int s;
     const struct sockaddr *addr;
     int addrlen;
{








  struct socksysreq req;

  req.args[0] = 3 ;
  req.args[1] = (int)s;
  req.args[2] = (int)addr;
  req.args[3] = (int)addrlen;

  return(ioctl(s, (0x80000000 |((sizeof(  struct socksysreq )& 0x7f )<<16)|( 'I' <<8)|  66 )  , &req));
# 3469 "signal.c"

}

 
 


int pthread_p_getpeername (s, addr, addrlen)
     int s;
     struct sockaddr *addr;
     int *addrlen;

{








  struct socksysreq req;

  req.args[0] = 4 ;
  req.args[1] = (int)s;
  req.args[2] = (int)addr;
  req.args[3] = (int)addrlen;

  return(ioctl(s, (0x80000000 |((sizeof(  struct socksysreq )& 0x7f )<<16)|( 'I' <<8)|  66 )  , &req));
# 3513 "signal.c"

}

 
 


int pthread_p_getsockopt (s, level, optname, optval, optlen)
     int s;
     int level;
     int optname;
     void* optval;
     int* optlen;

{
# 3537 "signal.c"

  struct socksysreq req;

  req.args[0] = 6 ;
  req.args[1] = (int)s;
  req.args[2] = (int)level;
  req.args[3] = (int)optname;
  req.args[4] = (int)optval;
  req.args[5] = (int)optlen;

  return(ioctl(s, (0x80000000 |((sizeof(  struct socksysreq )& 0x7f )<<16)|( 'I' <<8)|  66 )  , &req));
# 3567 "signal.c"

}

 
 


int pthread_p_select (width, readfds, writefds, exceptfds, timeout)
     int width;
     fd_set *readfds, *writefds, *exceptfds;
     struct timeval *timeout;
{



  return(pthread_sys_select(width, readfds, writefds, exceptfds, timeout));



}


 
 


int pthread_p_poll (fds, nfds, timeout)
     int nfds;
     struct pollfd fds[];
     int timeout;
{



  return(pthread_sys_poll(fds, nfds, timeout));



}





 
 


pid_t pthread_p_waitpid (pid_t pid, int *status, int options)
{
  return pthread_sys_waitpid(pid, status, options);
}

 
 


pid_t pthread_p_wait3 (int* status, int options, struct rusage * rusage)

{

   errno = 89 ;
   return -1;

}


