signalmodule.c.h revision c7027b79041524e4ff5414cf187433b3edd38ede
1/*[clinic input] 2preserve 3[clinic start generated code]*/ 4 5#if defined(HAVE_ALARM) 6 7PyDoc_STRVAR(signal_alarm__doc__, 8"alarm($module, seconds, /)\n" 9"--\n" 10"\n" 11"Arrange for SIGALRM to arrive after the given number of seconds."); 12 13#define SIGNAL_ALARM_METHODDEF \ 14 {"alarm", (PyCFunction)signal_alarm, METH_O, signal_alarm__doc__}, 15 16static long 17signal_alarm_impl(PyModuleDef *module, int seconds); 18 19static PyObject * 20signal_alarm(PyModuleDef *module, PyObject *arg) 21{ 22 PyObject *return_value = NULL; 23 int seconds; 24 long _return_value; 25 26 if (!PyArg_Parse(arg, "i:alarm", &seconds)) 27 goto exit; 28 _return_value = signal_alarm_impl(module, seconds); 29 if ((_return_value == -1) && PyErr_Occurred()) 30 goto exit; 31 return_value = PyLong_FromLong(_return_value); 32 33exit: 34 return return_value; 35} 36 37#endif /* defined(HAVE_ALARM) */ 38 39#if defined(HAVE_PAUSE) 40 41PyDoc_STRVAR(signal_pause__doc__, 42"pause($module, /)\n" 43"--\n" 44"\n" 45"Wait until a signal arrives."); 46 47#define SIGNAL_PAUSE_METHODDEF \ 48 {"pause", (PyCFunction)signal_pause, METH_NOARGS, signal_pause__doc__}, 49 50static PyObject * 51signal_pause_impl(PyModuleDef *module); 52 53static PyObject * 54signal_pause(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) 55{ 56 return signal_pause_impl(module); 57} 58 59#endif /* defined(HAVE_PAUSE) */ 60 61PyDoc_STRVAR(signal_signal__doc__, 62"signal($module, signalnum, handler, /)\n" 63"--\n" 64"\n" 65"Set the action for the given signal.\n" 66"\n" 67"The action can be SIG_DFL, SIG_IGN, or a callable Python object.\n" 68"The previous action is returned. See getsignal() for possible return values.\n" 69"\n" 70"*** IMPORTANT NOTICE ***\n" 71"A signal handler function is called with two arguments:\n" 72"the first is the signal number, the second is the interrupted stack frame."); 73 74#define SIGNAL_SIGNAL_METHODDEF \ 75 {"signal", (PyCFunction)signal_signal, METH_VARARGS, signal_signal__doc__}, 76 77static PyObject * 78signal_signal_impl(PyModuleDef *module, int signalnum, PyObject *handler); 79 80static PyObject * 81signal_signal(PyModuleDef *module, PyObject *args) 82{ 83 PyObject *return_value = NULL; 84 int signalnum; 85 PyObject *handler; 86 87 if (!PyArg_ParseTuple(args, "iO:signal", 88 &signalnum, &handler)) 89 goto exit; 90 return_value = signal_signal_impl(module, signalnum, handler); 91 92exit: 93 return return_value; 94} 95 96PyDoc_STRVAR(signal_getsignal__doc__, 97"getsignal($module, signalnum, /)\n" 98"--\n" 99"\n" 100"Return the current action for the given signal.\n" 101"\n" 102"The return value can be:\n" 103" SIG_IGN -- if the signal is being ignored\n" 104" SIG_DFL -- if the default action for the signal is in effect\n" 105" None -- if an unknown handler is in effect\n" 106" anything else -- the callable Python object used as a handler"); 107 108#define SIGNAL_GETSIGNAL_METHODDEF \ 109 {"getsignal", (PyCFunction)signal_getsignal, METH_O, signal_getsignal__doc__}, 110 111static PyObject * 112signal_getsignal_impl(PyModuleDef *module, int signalnum); 113 114static PyObject * 115signal_getsignal(PyModuleDef *module, PyObject *arg) 116{ 117 PyObject *return_value = NULL; 118 int signalnum; 119 120 if (!PyArg_Parse(arg, "i:getsignal", &signalnum)) 121 goto exit; 122 return_value = signal_getsignal_impl(module, signalnum); 123 124exit: 125 return return_value; 126} 127 128#if defined(HAVE_SIGINTERRUPT) 129 130PyDoc_STRVAR(signal_siginterrupt__doc__, 131"siginterrupt($module, signalnum, flag, /)\n" 132"--\n" 133"\n" 134"Change system call restart behaviour.\n" 135"\n" 136"If flag is False, system calls will be restarted when interrupted by\n" 137"signal sig, else system calls will be interrupted."); 138 139#define SIGNAL_SIGINTERRUPT_METHODDEF \ 140 {"siginterrupt", (PyCFunction)signal_siginterrupt, METH_VARARGS, signal_siginterrupt__doc__}, 141 142static PyObject * 143signal_siginterrupt_impl(PyModuleDef *module, int signalnum, int flag); 144 145static PyObject * 146signal_siginterrupt(PyModuleDef *module, PyObject *args) 147{ 148 PyObject *return_value = NULL; 149 int signalnum; 150 int flag; 151 152 if (!PyArg_ParseTuple(args, "ii:siginterrupt", 153 &signalnum, &flag)) 154 goto exit; 155 return_value = signal_siginterrupt_impl(module, signalnum, flag); 156 157exit: 158 return return_value; 159} 160 161#endif /* defined(HAVE_SIGINTERRUPT) */ 162 163#if defined(HAVE_SETITIMER) 164 165PyDoc_STRVAR(signal_setitimer__doc__, 166"setitimer($module, which, seconds, interval=0.0, /)\n" 167"--\n" 168"\n" 169"Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL or ITIMER_PROF).\n" 170"\n" 171"The timer will fire after value seconds and after that every interval seconds.\n" 172"The itimer can be cleared by setting seconds to zero.\n" 173"\n" 174"Returns old values as a tuple: (delay, interval)."); 175 176#define SIGNAL_SETITIMER_METHODDEF \ 177 {"setitimer", (PyCFunction)signal_setitimer, METH_VARARGS, signal_setitimer__doc__}, 178 179static PyObject * 180signal_setitimer_impl(PyModuleDef *module, int which, double seconds, 181 double interval); 182 183static PyObject * 184signal_setitimer(PyModuleDef *module, PyObject *args) 185{ 186 PyObject *return_value = NULL; 187 int which; 188 double seconds; 189 double interval = 0.0; 190 191 if (!PyArg_ParseTuple(args, "id|d:setitimer", 192 &which, &seconds, &interval)) 193 goto exit; 194 return_value = signal_setitimer_impl(module, which, seconds, interval); 195 196exit: 197 return return_value; 198} 199 200#endif /* defined(HAVE_SETITIMER) */ 201 202#if defined(HAVE_GETITIMER) 203 204PyDoc_STRVAR(signal_getitimer__doc__, 205"getitimer($module, which, /)\n" 206"--\n" 207"\n" 208"Returns current value of given itimer."); 209 210#define SIGNAL_GETITIMER_METHODDEF \ 211 {"getitimer", (PyCFunction)signal_getitimer, METH_O, signal_getitimer__doc__}, 212 213static PyObject * 214signal_getitimer_impl(PyModuleDef *module, int which); 215 216static PyObject * 217signal_getitimer(PyModuleDef *module, PyObject *arg) 218{ 219 PyObject *return_value = NULL; 220 int which; 221 222 if (!PyArg_Parse(arg, "i:getitimer", &which)) 223 goto exit; 224 return_value = signal_getitimer_impl(module, which); 225 226exit: 227 return return_value; 228} 229 230#endif /* defined(HAVE_GETITIMER) */ 231 232#if defined(PYPTHREAD_SIGMASK) 233 234PyDoc_STRVAR(signal_pthread_sigmask__doc__, 235"pthread_sigmask($module, how, mask, /)\n" 236"--\n" 237"\n" 238"Fetch and/or change the signal mask of the calling thread."); 239 240#define SIGNAL_PTHREAD_SIGMASK_METHODDEF \ 241 {"pthread_sigmask", (PyCFunction)signal_pthread_sigmask, METH_VARARGS, signal_pthread_sigmask__doc__}, 242 243static PyObject * 244signal_pthread_sigmask_impl(PyModuleDef *module, int how, PyObject *mask); 245 246static PyObject * 247signal_pthread_sigmask(PyModuleDef *module, PyObject *args) 248{ 249 PyObject *return_value = NULL; 250 int how; 251 PyObject *mask; 252 253 if (!PyArg_ParseTuple(args, "iO:pthread_sigmask", 254 &how, &mask)) 255 goto exit; 256 return_value = signal_pthread_sigmask_impl(module, how, mask); 257 258exit: 259 return return_value; 260} 261 262#endif /* defined(PYPTHREAD_SIGMASK) */ 263 264#if defined(HAVE_SIGPENDING) 265 266PyDoc_STRVAR(signal_sigpending__doc__, 267"sigpending($module, /)\n" 268"--\n" 269"\n" 270"Examine pending signals.\n" 271"\n" 272"Returns a set of signal numbers that are pending for delivery to\n" 273"the calling thread."); 274 275#define SIGNAL_SIGPENDING_METHODDEF \ 276 {"sigpending", (PyCFunction)signal_sigpending, METH_NOARGS, signal_sigpending__doc__}, 277 278static PyObject * 279signal_sigpending_impl(PyModuleDef *module); 280 281static PyObject * 282signal_sigpending(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) 283{ 284 return signal_sigpending_impl(module); 285} 286 287#endif /* defined(HAVE_SIGPENDING) */ 288 289#if defined(HAVE_SIGWAIT) 290 291PyDoc_STRVAR(signal_sigwait__doc__, 292"sigwait($module, sigset, /)\n" 293"--\n" 294"\n" 295"Wait for a signal.\n" 296"\n" 297"Suspend execution of the calling thread until the delivery of one of the\n" 298"signals specified in the signal set sigset. The function accepts the signal\n" 299"and returns the signal number."); 300 301#define SIGNAL_SIGWAIT_METHODDEF \ 302 {"sigwait", (PyCFunction)signal_sigwait, METH_O, signal_sigwait__doc__}, 303 304#endif /* defined(HAVE_SIGWAIT) */ 305 306#if defined(HAVE_SIGWAITINFO) 307 308PyDoc_STRVAR(signal_sigwaitinfo__doc__, 309"sigwaitinfo($module, sigset, /)\n" 310"--\n" 311"\n" 312"Wait synchronously until one of the signals in *sigset* is delivered.\n" 313"\n" 314"Returns a struct_siginfo containing information about the signal."); 315 316#define SIGNAL_SIGWAITINFO_METHODDEF \ 317 {"sigwaitinfo", (PyCFunction)signal_sigwaitinfo, METH_O, signal_sigwaitinfo__doc__}, 318 319#endif /* defined(HAVE_SIGWAITINFO) */ 320 321#if defined(HAVE_SIGTIMEDWAIT) 322 323PyDoc_STRVAR(signal_sigtimedwait__doc__, 324"sigtimedwait($module, sigset, timeout, /)\n" 325"--\n" 326"\n" 327"Like sigwaitinfo(), but with a timeout.\n" 328"\n" 329"The timeout is specified in seconds, with floating point numbers allowed."); 330 331#define SIGNAL_SIGTIMEDWAIT_METHODDEF \ 332 {"sigtimedwait", (PyCFunction)signal_sigtimedwait, METH_VARARGS, signal_sigtimedwait__doc__}, 333 334static PyObject * 335signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, 336 PyObject *timeout); 337 338static PyObject * 339signal_sigtimedwait(PyModuleDef *module, PyObject *args) 340{ 341 PyObject *return_value = NULL; 342 PyObject *sigset; 343 PyObject *timeout; 344 345 if (!PyArg_UnpackTuple(args, "sigtimedwait", 346 2, 2, 347 &sigset, &timeout)) 348 goto exit; 349 return_value = signal_sigtimedwait_impl(module, sigset, timeout); 350 351exit: 352 return return_value; 353} 354 355#endif /* defined(HAVE_SIGTIMEDWAIT) */ 356 357#if (defined(HAVE_PTHREAD_KILL) && defined(WITH_THREAD)) 358 359PyDoc_STRVAR(signal_pthread_kill__doc__, 360"pthread_kill($module, thread_id, signalnum, /)\n" 361"--\n" 362"\n" 363"Send a signal to a thread."); 364 365#define SIGNAL_PTHREAD_KILL_METHODDEF \ 366 {"pthread_kill", (PyCFunction)signal_pthread_kill, METH_VARARGS, signal_pthread_kill__doc__}, 367 368static PyObject * 369signal_pthread_kill_impl(PyModuleDef *module, long thread_id, int signalnum); 370 371static PyObject * 372signal_pthread_kill(PyModuleDef *module, PyObject *args) 373{ 374 PyObject *return_value = NULL; 375 long thread_id; 376 int signalnum; 377 378 if (!PyArg_ParseTuple(args, "li:pthread_kill", 379 &thread_id, &signalnum)) 380 goto exit; 381 return_value = signal_pthread_kill_impl(module, thread_id, signalnum); 382 383exit: 384 return return_value; 385} 386 387#endif /* (defined(HAVE_PTHREAD_KILL) && defined(WITH_THREAD)) */ 388 389#ifndef SIGNAL_ALARM_METHODDEF 390 #define SIGNAL_ALARM_METHODDEF 391#endif /* !defined(SIGNAL_ALARM_METHODDEF) */ 392 393#ifndef SIGNAL_PAUSE_METHODDEF 394 #define SIGNAL_PAUSE_METHODDEF 395#endif /* !defined(SIGNAL_PAUSE_METHODDEF) */ 396 397#ifndef SIGNAL_SIGINTERRUPT_METHODDEF 398 #define SIGNAL_SIGINTERRUPT_METHODDEF 399#endif /* !defined(SIGNAL_SIGINTERRUPT_METHODDEF) */ 400 401#ifndef SIGNAL_SETITIMER_METHODDEF 402 #define SIGNAL_SETITIMER_METHODDEF 403#endif /* !defined(SIGNAL_SETITIMER_METHODDEF) */ 404 405#ifndef SIGNAL_GETITIMER_METHODDEF 406 #define SIGNAL_GETITIMER_METHODDEF 407#endif /* !defined(SIGNAL_GETITIMER_METHODDEF) */ 408 409#ifndef SIGNAL_PTHREAD_SIGMASK_METHODDEF 410 #define SIGNAL_PTHREAD_SIGMASK_METHODDEF 411#endif /* !defined(SIGNAL_PTHREAD_SIGMASK_METHODDEF) */ 412 413#ifndef SIGNAL_SIGPENDING_METHODDEF 414 #define SIGNAL_SIGPENDING_METHODDEF 415#endif /* !defined(SIGNAL_SIGPENDING_METHODDEF) */ 416 417#ifndef SIGNAL_SIGWAIT_METHODDEF 418 #define SIGNAL_SIGWAIT_METHODDEF 419#endif /* !defined(SIGNAL_SIGWAIT_METHODDEF) */ 420 421#ifndef SIGNAL_SIGWAITINFO_METHODDEF 422 #define SIGNAL_SIGWAITINFO_METHODDEF 423#endif /* !defined(SIGNAL_SIGWAITINFO_METHODDEF) */ 424 425#ifndef SIGNAL_SIGTIMEDWAIT_METHODDEF 426 #define SIGNAL_SIGTIMEDWAIT_METHODDEF 427#endif /* !defined(SIGNAL_SIGTIMEDWAIT_METHODDEF) */ 428 429#ifndef SIGNAL_PTHREAD_KILL_METHODDEF 430 #define SIGNAL_PTHREAD_KILL_METHODDEF 431#endif /* !defined(SIGNAL_PTHREAD_KILL_METHODDEF) */ 432/*[clinic end generated code: output=65ca7b83632eda99 input=a9049054013a1b77]*/ 433