17db96d56Sopenharmony_ci#ifndef MULTIPROCESSING_H 27db96d56Sopenharmony_ci#define MULTIPROCESSING_H 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci#define PY_SSIZE_T_CLEAN 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ci#include "Python.h" 77db96d56Sopenharmony_ci#include "structmember.h" 87db96d56Sopenharmony_ci#include "pythread.h" 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci/* 117db96d56Sopenharmony_ci * Platform includes and definitions 127db96d56Sopenharmony_ci */ 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci#ifdef MS_WINDOWS 157db96d56Sopenharmony_ci# define WIN32_LEAN_AND_MEAN 167db96d56Sopenharmony_ci# include <windows.h> 177db96d56Sopenharmony_ci# include <winsock2.h> 187db96d56Sopenharmony_ci# include <process.h> /* getpid() */ 197db96d56Sopenharmony_ci# ifdef Py_DEBUG 207db96d56Sopenharmony_ci# include <crtdbg.h> 217db96d56Sopenharmony_ci# endif 227db96d56Sopenharmony_ci# define SEM_HANDLE HANDLE 237db96d56Sopenharmony_ci# define SEM_VALUE_MAX LONG_MAX 247db96d56Sopenharmony_ci# define HAVE_MP_SEMAPHORE 257db96d56Sopenharmony_ci#else 267db96d56Sopenharmony_ci# include <fcntl.h> /* O_CREAT and O_EXCL */ 277db96d56Sopenharmony_ci# if defined(HAVE_SEM_OPEN) && !defined(POSIX_SEMAPHORES_NOT_ENABLED) 287db96d56Sopenharmony_ci# define HAVE_MP_SEMAPHORE 297db96d56Sopenharmony_ci# include <semaphore.h> 307db96d56Sopenharmony_ci typedef sem_t *SEM_HANDLE; 317db96d56Sopenharmony_ci# endif 327db96d56Sopenharmony_ci#endif 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci/* 357db96d56Sopenharmony_ci * Issue 3110 - Solaris does not define SEM_VALUE_MAX 367db96d56Sopenharmony_ci */ 377db96d56Sopenharmony_ci#ifndef SEM_VALUE_MAX 387db96d56Sopenharmony_ci #if defined(HAVE_SYSCONF) && defined(_SC_SEM_VALUE_MAX) 397db96d56Sopenharmony_ci # define SEM_VALUE_MAX sysconf(_SC_SEM_VALUE_MAX) 407db96d56Sopenharmony_ci #elif defined(_SEM_VALUE_MAX) 417db96d56Sopenharmony_ci # define SEM_VALUE_MAX _SEM_VALUE_MAX 427db96d56Sopenharmony_ci #elif defined(_POSIX_SEM_VALUE_MAX) 437db96d56Sopenharmony_ci # define SEM_VALUE_MAX _POSIX_SEM_VALUE_MAX 447db96d56Sopenharmony_ci #else 457db96d56Sopenharmony_ci # define SEM_VALUE_MAX INT_MAX 467db96d56Sopenharmony_ci #endif 477db96d56Sopenharmony_ci#endif 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci/* 517db96d56Sopenharmony_ci * Format codes 527db96d56Sopenharmony_ci */ 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci#if SIZEOF_VOID_P == SIZEOF_LONG 557db96d56Sopenharmony_ci# define F_POINTER "k" 567db96d56Sopenharmony_ci# define T_POINTER T_ULONG 577db96d56Sopenharmony_ci#elif SIZEOF_VOID_P == SIZEOF_LONG_LONG 587db96d56Sopenharmony_ci# define F_POINTER "K" 597db96d56Sopenharmony_ci# define T_POINTER T_ULONGLONG 607db96d56Sopenharmony_ci#else 617db96d56Sopenharmony_ci# error "can't find format code for unsigned integer of same size as void*" 627db96d56Sopenharmony_ci#endif 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci#ifdef MS_WINDOWS 657db96d56Sopenharmony_ci# define F_HANDLE F_POINTER 667db96d56Sopenharmony_ci# define T_HANDLE T_POINTER 677db96d56Sopenharmony_ci# define F_SEM_HANDLE F_HANDLE 687db96d56Sopenharmony_ci# define T_SEM_HANDLE T_HANDLE 697db96d56Sopenharmony_ci#else 707db96d56Sopenharmony_ci# define F_HANDLE "i" 717db96d56Sopenharmony_ci# define T_HANDLE T_INT 727db96d56Sopenharmony_ci# define F_SEM_HANDLE F_POINTER 737db96d56Sopenharmony_ci# define T_SEM_HANDLE T_POINTER 747db96d56Sopenharmony_ci#endif 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci/* 777db96d56Sopenharmony_ci * Error codes which can be returned by functions called without GIL 787db96d56Sopenharmony_ci */ 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ci#define MP_SUCCESS (0) 817db96d56Sopenharmony_ci#define MP_STANDARD_ERROR (-1) 827db96d56Sopenharmony_ci#define MP_MEMORY_ERROR (-1001) 837db96d56Sopenharmony_ci#define MP_SOCKET_ERROR (-1002) 847db96d56Sopenharmony_ci#define MP_EXCEPTION_HAS_BEEN_SET (-1003) 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ciPyObject *_PyMp_SetError(PyObject *Type, int num); 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci/* 897db96d56Sopenharmony_ci * Externs - not all will really exist on all platforms 907db96d56Sopenharmony_ci */ 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ciextern PyTypeObject _PyMp_SemLockType; 937db96d56Sopenharmony_ciextern PyObject *_PyMp_sem_unlink(const char *name); 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci#endif /* MULTIPROCESSING_H */ 96