mirror of https://github.com/tongzx/nt5src
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
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;
|
|
}
|