Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

83 lines
1.6 KiB

#include <nt.h>
#include <ntrtl.h>
#include "psxmsg.h"
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <errno.h>
#include "tsttmp.h" // defines DbgPrint as printf
extern int errno;
void
__cdecl
catcher(
IN int sig
);
int caught_sig;
int
__cdecl
main(int argc, char *argv[])
{
LONG i;
int e;
struct sigaction act, oact;
sigset_t eset,fset;
pid_t pid;
LARGE_INTEGER DelayTime;
pid = getpid();
DbgPrint("Looper Posix Process... Pid = %lx\n\n",pid);
DbgPrint("Looper Delay\n");
DelayTime.HighPart = -1;
DelayTime.LowPart = -100000;
NtDelayExecution(FALSE,&DelayTime);
DbgPrint("Looper Delay Done\n");
_exit(8);
sigemptyset(&eset);
sigfillset(&fset);
sigdelset(&fset,SIGHUP);
act.sa_handler = catcher;
sigfillset(&act.sa_mask);
act.sa_flags = 0;
if (sigaction(SIGUSR1, &act ,&oact) ) {
DbgPrint("main: fail sigaction errno %lx\n",errno);
_exit(-1);
}
for(i=1;i<0x100000;i++){
if ( (i & 0xfff) == 0 ) DbgPrint("Looper: i == %lx\n",i);
if ( (i & 0x7fff) == 0) {
DbgPrint("Looper: calling sigprocmask i == %lx\n",i);
sigprocmask(SIG_SETMASK,&fset,NULL);
DbgPrint("Looper: calling sigsuspend i == %lx\n",i);
e = sigsuspend(&eset);
DbgPrint("Looper: returned from sigsuspend %lx errno %lx i %lx\n",e,errno,i);
}
}
DbgPrint("Looper: Exiting...\n");
return 1;
}
void
__cdecl
catcher(
IN int sig
)
{
DbgPrint("Looper: In Catcher, signal == %lx\n",sig);
caught_sig = 1;
}