LCOV - code coverage report
Current view: top level - Modules/_multiprocessing/clinic - semaphore.c.h (source / functions) Hit Total Coverage
Test: CPython 3.12 LCOV report [commit acb105a7c1f] Lines: 73 92 79.3 %
Date: 2022-07-20 13:12:14 Functions: 10 11 90.9 %
Branches: 33 68 48.5 %

           Branch data     Line data    Source code
       1                 :            : /*[clinic input]
       2                 :            : preserve
       3                 :            : [clinic start generated code]*/
       4                 :            : 
       5                 :            : #if defined(HAVE_MP_SEMAPHORE) && defined(MS_WINDOWS)
       6                 :            : 
       7                 :            : PyDoc_STRVAR(_multiprocessing_SemLock_acquire__doc__,
       8                 :            : "acquire($self, /, block=True, timeout=None)\n"
       9                 :            : "--\n"
      10                 :            : "\n"
      11                 :            : "Acquire the semaphore/lock.");
      12                 :            : 
      13                 :            : #define _MULTIPROCESSING_SEMLOCK_ACQUIRE_METHODDEF    \
      14                 :            :     {"acquire", _PyCFunction_CAST(_multiprocessing_SemLock_acquire), METH_FASTCALL|METH_KEYWORDS, _multiprocessing_SemLock_acquire__doc__},
      15                 :            : 
      16                 :            : static PyObject *
      17                 :            : _multiprocessing_SemLock_acquire_impl(SemLockObject *self, int blocking,
      18                 :            :                                       PyObject *timeout_obj);
      19                 :            : 
      20                 :            : static PyObject *
      21                 :            : _multiprocessing_SemLock_acquire(SemLockObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
      22                 :            : {
      23                 :            :     PyObject *return_value = NULL;
      24                 :            :     static const char * const _keywords[] = {"block", "timeout", NULL};
      25                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "acquire", 0};
      26                 :            :     PyObject *argsbuf[2];
      27                 :            :     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
      28                 :            :     int blocking = 1;
      29                 :            :     PyObject *timeout_obj = Py_None;
      30                 :            : 
      31                 :            :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 2, 0, argsbuf);
      32                 :            :     if (!args) {
      33                 :            :         goto exit;
      34                 :            :     }
      35                 :            :     if (!noptargs) {
      36                 :            :         goto skip_optional_pos;
      37                 :            :     }
      38                 :            :     if (args[0]) {
      39                 :            :         blocking = _PyLong_AsInt(args[0]);
      40                 :            :         if (blocking == -1 && PyErr_Occurred()) {
      41                 :            :             goto exit;
      42                 :            :         }
      43                 :            :         if (!--noptargs) {
      44                 :            :             goto skip_optional_pos;
      45                 :            :         }
      46                 :            :     }
      47                 :            :     timeout_obj = args[1];
      48                 :            : skip_optional_pos:
      49                 :            :     return_value = _multiprocessing_SemLock_acquire_impl(self, blocking, timeout_obj);
      50                 :            : 
      51                 :            : exit:
      52                 :            :     return return_value;
      53                 :            : }
      54                 :            : 
      55                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) && defined(MS_WINDOWS) */
      56                 :            : 
      57                 :            : #if defined(HAVE_MP_SEMAPHORE) && defined(MS_WINDOWS)
      58                 :            : 
      59                 :            : PyDoc_STRVAR(_multiprocessing_SemLock_release__doc__,
      60                 :            : "release($self, /)\n"
      61                 :            : "--\n"
      62                 :            : "\n"
      63                 :            : "Release the semaphore/lock.");
      64                 :            : 
      65                 :            : #define _MULTIPROCESSING_SEMLOCK_RELEASE_METHODDEF    \
      66                 :            :     {"release", (PyCFunction)_multiprocessing_SemLock_release, METH_NOARGS, _multiprocessing_SemLock_release__doc__},
      67                 :            : 
      68                 :            : static PyObject *
      69                 :            : _multiprocessing_SemLock_release_impl(SemLockObject *self);
      70                 :            : 
      71                 :            : static PyObject *
      72                 :            : _multiprocessing_SemLock_release(SemLockObject *self, PyObject *Py_UNUSED(ignored))
      73                 :            : {
      74                 :            :     return _multiprocessing_SemLock_release_impl(self);
      75                 :            : }
      76                 :            : 
      77                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) && defined(MS_WINDOWS) */
      78                 :            : 
      79                 :            : #if defined(HAVE_MP_SEMAPHORE) && !defined(MS_WINDOWS)
      80                 :            : 
      81                 :            : PyDoc_STRVAR(_multiprocessing_SemLock_acquire__doc__,
      82                 :            : "acquire($self, /, block=True, timeout=None)\n"
      83                 :            : "--\n"
      84                 :            : "\n"
      85                 :            : "Acquire the semaphore/lock.");
      86                 :            : 
      87                 :            : #define _MULTIPROCESSING_SEMLOCK_ACQUIRE_METHODDEF    \
      88                 :            :     {"acquire", _PyCFunction_CAST(_multiprocessing_SemLock_acquire), METH_FASTCALL|METH_KEYWORDS, _multiprocessing_SemLock_acquire__doc__},
      89                 :            : 
      90                 :            : static PyObject *
      91                 :            : _multiprocessing_SemLock_acquire_impl(SemLockObject *self, int blocking,
      92                 :            :                                       PyObject *timeout_obj);
      93                 :            : 
      94                 :            : static PyObject *
      95                 :      43330 : _multiprocessing_SemLock_acquire(SemLockObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
      96                 :            : {
      97                 :      43330 :     PyObject *return_value = NULL;
      98                 :            :     static const char * const _keywords[] = {"block", "timeout", NULL};
      99                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "acquire", 0};
     100                 :            :     PyObject *argsbuf[2];
     101         [ +  + ]:      43330 :     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     102                 :      43330 :     int blocking = 1;
     103                 :      43330 :     PyObject *timeout_obj = Py_None;
     104                 :            : 
     105   [ +  +  +  -  :      43330 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 2, 0, argsbuf);
             +  -  -  + ]
     106         [ -  + ]:      43330 :     if (!args) {
     107                 :          0 :         goto exit;
     108                 :            :     }
     109         [ +  + ]:      43330 :     if (!noptargs) {
     110                 :      17172 :         goto skip_optional_pos;
     111                 :            :     }
     112         [ +  + ]:      26158 :     if (args[0]) {
     113                 :      26149 :         blocking = _PyLong_AsInt(args[0]);
     114   [ -  +  -  - ]:      26149 :         if (blocking == -1 && PyErr_Occurred()) {
     115                 :          0 :             goto exit;
     116                 :            :         }
     117         [ +  + ]:      26149 :         if (!--noptargs) {
     118                 :      16608 :             goto skip_optional_pos;
     119                 :            :         }
     120                 :            :     }
     121                 :       9550 :     timeout_obj = args[1];
     122                 :      43330 : skip_optional_pos:
     123                 :      43330 :     return_value = _multiprocessing_SemLock_acquire_impl(self, blocking, timeout_obj);
     124                 :            : 
     125                 :      43330 : exit:
     126                 :      43330 :     return return_value;
     127                 :            : }
     128                 :            : 
     129                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) && !defined(MS_WINDOWS) */
     130                 :            : 
     131                 :            : #if defined(HAVE_MP_SEMAPHORE) && !defined(MS_WINDOWS)
     132                 :            : 
     133                 :            : PyDoc_STRVAR(_multiprocessing_SemLock_release__doc__,
     134                 :            : "release($self, /)\n"
     135                 :            : "--\n"
     136                 :            : "\n"
     137                 :            : "Release the semaphore/lock.");
     138                 :            : 
     139                 :            : #define _MULTIPROCESSING_SEMLOCK_RELEASE_METHODDEF    \
     140                 :            :     {"release", (PyCFunction)_multiprocessing_SemLock_release, METH_NOARGS, _multiprocessing_SemLock_release__doc__},
     141                 :            : 
     142                 :            : static PyObject *
     143                 :            : _multiprocessing_SemLock_release_impl(SemLockObject *self);
     144                 :            : 
     145                 :            : static PyObject *
     146                 :      33943 : _multiprocessing_SemLock_release(SemLockObject *self, PyObject *Py_UNUSED(ignored))
     147                 :            : {
     148                 :      33943 :     return _multiprocessing_SemLock_release_impl(self);
     149                 :            : }
     150                 :            : 
     151                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) && !defined(MS_WINDOWS) */
     152                 :            : 
     153                 :            : #if defined(HAVE_MP_SEMAPHORE)
     154                 :            : 
     155                 :            : static PyObject *
     156                 :            : _multiprocessing_SemLock_impl(PyTypeObject *type, int kind, int value,
     157                 :            :                               int maxvalue, const char *name, int unlink);
     158                 :            : 
     159                 :            : static PyObject *
     160                 :       4131 : _multiprocessing_SemLock(PyTypeObject *type, PyObject *args, PyObject *kwargs)
     161                 :            : {
     162                 :       4131 :     PyObject *return_value = NULL;
     163                 :            :     static const char * const _keywords[] = {"kind", "value", "maxvalue", "name", "unlink", NULL};
     164                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "SemLock", 0};
     165                 :            :     PyObject *argsbuf[5];
     166                 :            :     PyObject * const *fastargs;
     167                 :       4131 :     Py_ssize_t nargs = PyTuple_GET_SIZE(args);
     168                 :            :     int kind;
     169                 :            :     int value;
     170                 :            :     int maxvalue;
     171                 :            :     const char *name;
     172                 :            :     int unlink;
     173                 :            : 
     174   [ +  -  +  -  :       4131 :     fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 5, 5, 0, argsbuf);
             +  -  +  - ]
     175         [ -  + ]:       4131 :     if (!fastargs) {
     176                 :          0 :         goto exit;
     177                 :            :     }
     178                 :       4131 :     kind = _PyLong_AsInt(fastargs[0]);
     179   [ -  +  -  - ]:       4131 :     if (kind == -1 && PyErr_Occurred()) {
     180                 :          0 :         goto exit;
     181                 :            :     }
     182                 :       4131 :     value = _PyLong_AsInt(fastargs[1]);
     183   [ -  +  -  - ]:       4131 :     if (value == -1 && PyErr_Occurred()) {
     184                 :          0 :         goto exit;
     185                 :            :     }
     186                 :       4131 :     maxvalue = _PyLong_AsInt(fastargs[2]);
     187   [ -  +  -  - ]:       4131 :     if (maxvalue == -1 && PyErr_Occurred()) {
     188                 :          0 :         goto exit;
     189                 :            :     }
     190         [ -  + ]:       4131 :     if (!PyUnicode_Check(fastargs[3])) {
     191                 :          0 :         _PyArg_BadArgument("SemLock", "argument 'name'", "str", fastargs[3]);
     192                 :          0 :         goto exit;
     193                 :            :     }
     194                 :            :     Py_ssize_t name_length;
     195                 :       4131 :     name = PyUnicode_AsUTF8AndSize(fastargs[3], &name_length);
     196         [ -  + ]:       4131 :     if (name == NULL) {
     197                 :          0 :         goto exit;
     198                 :            :     }
     199         [ -  + ]:       4131 :     if (strlen(name) != (size_t)name_length) {
     200                 :          0 :         PyErr_SetString(PyExc_ValueError, "embedded null character");
     201                 :          0 :         goto exit;
     202                 :            :     }
     203                 :       4131 :     unlink = _PyLong_AsInt(fastargs[4]);
     204   [ -  +  -  - ]:       4131 :     if (unlink == -1 && PyErr_Occurred()) {
     205                 :          0 :         goto exit;
     206                 :            :     }
     207                 :       4131 :     return_value = _multiprocessing_SemLock_impl(type, kind, value, maxvalue, name, unlink);
     208                 :            : 
     209                 :       4131 : exit:
     210                 :       4131 :     return return_value;
     211                 :            : }
     212                 :            : 
     213                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) */
     214                 :            : 
     215                 :            : #if defined(HAVE_MP_SEMAPHORE)
     216                 :            : 
     217                 :            : PyDoc_STRVAR(_multiprocessing_SemLock__rebuild__doc__,
     218                 :            : "_rebuild($type, handle, kind, maxvalue, name, /)\n"
     219                 :            : "--\n"
     220                 :            : "\n");
     221                 :            : 
     222                 :            : #define _MULTIPROCESSING_SEMLOCK__REBUILD_METHODDEF    \
     223                 :            :     {"_rebuild", _PyCFunction_CAST(_multiprocessing_SemLock__rebuild), METH_FASTCALL|METH_CLASS, _multiprocessing_SemLock__rebuild__doc__},
     224                 :            : 
     225                 :            : static PyObject *
     226                 :            : _multiprocessing_SemLock__rebuild_impl(PyTypeObject *type, SEM_HANDLE handle,
     227                 :            :                                        int kind, int maxvalue,
     228                 :            :                                        const char *name);
     229                 :            : 
     230                 :            : static PyObject *
     231                 :       1502 : _multiprocessing_SemLock__rebuild(PyTypeObject *type, PyObject *const *args, Py_ssize_t nargs)
     232                 :            : {
     233                 :       1502 :     PyObject *return_value = NULL;
     234                 :            :     SEM_HANDLE handle;
     235                 :            :     int kind;
     236                 :            :     int maxvalue;
     237                 :            :     const char *name;
     238                 :            : 
     239         [ -  + ]:       1502 :     if (!_PyArg_ParseStack(args, nargs, ""F_SEM_HANDLE"iiz:_rebuild",
     240                 :            :         &handle, &kind, &maxvalue, &name)) {
     241                 :          0 :         goto exit;
     242                 :            :     }
     243                 :       1502 :     return_value = _multiprocessing_SemLock__rebuild_impl(type, handle, kind, maxvalue, name);
     244                 :            : 
     245                 :       1502 : exit:
     246                 :       1502 :     return return_value;
     247                 :            : }
     248                 :            : 
     249                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) */
     250                 :            : 
     251                 :            : #if defined(HAVE_MP_SEMAPHORE)
     252                 :            : 
     253                 :            : PyDoc_STRVAR(_multiprocessing_SemLock__count__doc__,
     254                 :            : "_count($self, /)\n"
     255                 :            : "--\n"
     256                 :            : "\n"
     257                 :            : "Num of `acquire()`s minus num of `release()`s for this process.");
     258                 :            : 
     259                 :            : #define _MULTIPROCESSING_SEMLOCK__COUNT_METHODDEF    \
     260                 :            :     {"_count", (PyCFunction)_multiprocessing_SemLock__count, METH_NOARGS, _multiprocessing_SemLock__count__doc__},
     261                 :            : 
     262                 :            : static PyObject *
     263                 :            : _multiprocessing_SemLock__count_impl(SemLockObject *self);
     264                 :            : 
     265                 :            : static PyObject *
     266                 :       7660 : _multiprocessing_SemLock__count(SemLockObject *self, PyObject *Py_UNUSED(ignored))
     267                 :            : {
     268                 :       7660 :     return _multiprocessing_SemLock__count_impl(self);
     269                 :            : }
     270                 :            : 
     271                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) */
     272                 :            : 
     273                 :            : #if defined(HAVE_MP_SEMAPHORE)
     274                 :            : 
     275                 :            : PyDoc_STRVAR(_multiprocessing_SemLock__is_mine__doc__,
     276                 :            : "_is_mine($self, /)\n"
     277                 :            : "--\n"
     278                 :            : "\n"
     279                 :            : "Whether the lock is owned by this thread.");
     280                 :            : 
     281                 :            : #define _MULTIPROCESSING_SEMLOCK__IS_MINE_METHODDEF    \
     282                 :            :     {"_is_mine", (PyCFunction)_multiprocessing_SemLock__is_mine, METH_NOARGS, _multiprocessing_SemLock__is_mine__doc__},
     283                 :            : 
     284                 :            : static PyObject *
     285                 :            : _multiprocessing_SemLock__is_mine_impl(SemLockObject *self);
     286                 :            : 
     287                 :            : static PyObject *
     288                 :       9888 : _multiprocessing_SemLock__is_mine(SemLockObject *self, PyObject *Py_UNUSED(ignored))
     289                 :            : {
     290                 :       9888 :     return _multiprocessing_SemLock__is_mine_impl(self);
     291                 :            : }
     292                 :            : 
     293                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) */
     294                 :            : 
     295                 :            : #if defined(HAVE_MP_SEMAPHORE)
     296                 :            : 
     297                 :            : PyDoc_STRVAR(_multiprocessing_SemLock__get_value__doc__,
     298                 :            : "_get_value($self, /)\n"
     299                 :            : "--\n"
     300                 :            : "\n"
     301                 :            : "Get the value of the semaphore.");
     302                 :            : 
     303                 :            : #define _MULTIPROCESSING_SEMLOCK__GET_VALUE_METHODDEF    \
     304                 :            :     {"_get_value", (PyCFunction)_multiprocessing_SemLock__get_value, METH_NOARGS, _multiprocessing_SemLock__get_value__doc__},
     305                 :            : 
     306                 :            : static PyObject *
     307                 :            : _multiprocessing_SemLock__get_value_impl(SemLockObject *self);
     308                 :            : 
     309                 :            : static PyObject *
     310                 :        144 : _multiprocessing_SemLock__get_value(SemLockObject *self, PyObject *Py_UNUSED(ignored))
     311                 :            : {
     312                 :        144 :     return _multiprocessing_SemLock__get_value_impl(self);
     313                 :            : }
     314                 :            : 
     315                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) */
     316                 :            : 
     317                 :            : #if defined(HAVE_MP_SEMAPHORE)
     318                 :            : 
     319                 :            : PyDoc_STRVAR(_multiprocessing_SemLock__is_zero__doc__,
     320                 :            : "_is_zero($self, /)\n"
     321                 :            : "--\n"
     322                 :            : "\n"
     323                 :            : "Return whether semaphore has value zero.");
     324                 :            : 
     325                 :            : #define _MULTIPROCESSING_SEMLOCK__IS_ZERO_METHODDEF    \
     326                 :            :     {"_is_zero", (PyCFunction)_multiprocessing_SemLock__is_zero, METH_NOARGS, _multiprocessing_SemLock__is_zero__doc__},
     327                 :            : 
     328                 :            : static PyObject *
     329                 :            : _multiprocessing_SemLock__is_zero_impl(SemLockObject *self);
     330                 :            : 
     331                 :            : static PyObject *
     332                 :       2187 : _multiprocessing_SemLock__is_zero(SemLockObject *self, PyObject *Py_UNUSED(ignored))
     333                 :            : {
     334                 :       2187 :     return _multiprocessing_SemLock__is_zero_impl(self);
     335                 :            : }
     336                 :            : 
     337                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) */
     338                 :            : 
     339                 :            : #if defined(HAVE_MP_SEMAPHORE)
     340                 :            : 
     341                 :            : PyDoc_STRVAR(_multiprocessing_SemLock__after_fork__doc__,
     342                 :            : "_after_fork($self, /)\n"
     343                 :            : "--\n"
     344                 :            : "\n"
     345                 :            : "Rezero the net acquisition count after fork().");
     346                 :            : 
     347                 :            : #define _MULTIPROCESSING_SEMLOCK__AFTER_FORK_METHODDEF    \
     348                 :            :     {"_after_fork", (PyCFunction)_multiprocessing_SemLock__after_fork, METH_NOARGS, _multiprocessing_SemLock__after_fork__doc__},
     349                 :            : 
     350                 :            : static PyObject *
     351                 :            : _multiprocessing_SemLock__after_fork_impl(SemLockObject *self);
     352                 :            : 
     353                 :            : static PyObject *
     354                 :          0 : _multiprocessing_SemLock__after_fork(SemLockObject *self, PyObject *Py_UNUSED(ignored))
     355                 :            : {
     356                 :          0 :     return _multiprocessing_SemLock__after_fork_impl(self);
     357                 :            : }
     358                 :            : 
     359                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) */
     360                 :            : 
     361                 :            : #if defined(HAVE_MP_SEMAPHORE)
     362                 :            : 
     363                 :            : PyDoc_STRVAR(_multiprocessing_SemLock___enter____doc__,
     364                 :            : "__enter__($self, /)\n"
     365                 :            : "--\n"
     366                 :            : "\n"
     367                 :            : "Enter the semaphore/lock.");
     368                 :            : 
     369                 :            : #define _MULTIPROCESSING_SEMLOCK___ENTER___METHODDEF    \
     370                 :            :     {"__enter__", (PyCFunction)_multiprocessing_SemLock___enter__, METH_NOARGS, _multiprocessing_SemLock___enter____doc__},
     371                 :            : 
     372                 :            : static PyObject *
     373                 :            : _multiprocessing_SemLock___enter___impl(SemLockObject *self);
     374                 :            : 
     375                 :            : static PyObject *
     376                 :      14225 : _multiprocessing_SemLock___enter__(SemLockObject *self, PyObject *Py_UNUSED(ignored))
     377                 :            : {
     378                 :      14225 :     return _multiprocessing_SemLock___enter___impl(self);
     379                 :            : }
     380                 :            : 
     381                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) */
     382                 :            : 
     383                 :            : #if defined(HAVE_MP_SEMAPHORE)
     384                 :            : 
     385                 :            : PyDoc_STRVAR(_multiprocessing_SemLock___exit____doc__,
     386                 :            : "__exit__($self, exc_type=None, exc_value=None, exc_tb=None, /)\n"
     387                 :            : "--\n"
     388                 :            : "\n"
     389                 :            : "Exit the semaphore/lock.");
     390                 :            : 
     391                 :            : #define _MULTIPROCESSING_SEMLOCK___EXIT___METHODDEF    \
     392                 :            :     {"__exit__", _PyCFunction_CAST(_multiprocessing_SemLock___exit__), METH_FASTCALL, _multiprocessing_SemLock___exit____doc__},
     393                 :            : 
     394                 :            : static PyObject *
     395                 :            : _multiprocessing_SemLock___exit___impl(SemLockObject *self,
     396                 :            :                                        PyObject *exc_type,
     397                 :            :                                        PyObject *exc_value, PyObject *exc_tb);
     398                 :            : 
     399                 :            : static PyObject *
     400                 :      14225 : _multiprocessing_SemLock___exit__(SemLockObject *self, PyObject *const *args, Py_ssize_t nargs)
     401                 :            : {
     402                 :      14225 :     PyObject *return_value = NULL;
     403                 :      14225 :     PyObject *exc_type = Py_None;
     404                 :      14225 :     PyObject *exc_value = Py_None;
     405                 :      14225 :     PyObject *exc_tb = Py_None;
     406                 :            : 
     407   [ +  -  -  +  :      14225 :     if (!_PyArg_CheckPositional("__exit__", nargs, 0, 3)) {
                   -  - ]
     408                 :          0 :         goto exit;
     409                 :            :     }
     410         [ -  + ]:      14225 :     if (nargs < 1) {
     411                 :          0 :         goto skip_optional;
     412                 :            :     }
     413                 :      14225 :     exc_type = args[0];
     414         [ -  + ]:      14225 :     if (nargs < 2) {
     415                 :          0 :         goto skip_optional;
     416                 :            :     }
     417                 :      14225 :     exc_value = args[1];
     418         [ -  + ]:      14225 :     if (nargs < 3) {
     419                 :          0 :         goto skip_optional;
     420                 :            :     }
     421                 :      14225 :     exc_tb = args[2];
     422                 :      14225 : skip_optional:
     423                 :      14225 :     return_value = _multiprocessing_SemLock___exit___impl(self, exc_type, exc_value, exc_tb);
     424                 :            : 
     425                 :      14225 : exit:
     426                 :      14225 :     return return_value;
     427                 :            : }
     428                 :            : 
     429                 :            : #endif /* defined(HAVE_MP_SEMAPHORE) */
     430                 :            : 
     431                 :            : #ifndef _MULTIPROCESSING_SEMLOCK_ACQUIRE_METHODDEF
     432                 :            :     #define _MULTIPROCESSING_SEMLOCK_ACQUIRE_METHODDEF
     433                 :            : #endif /* !defined(_MULTIPROCESSING_SEMLOCK_ACQUIRE_METHODDEF) */
     434                 :            : 
     435                 :            : #ifndef _MULTIPROCESSING_SEMLOCK_RELEASE_METHODDEF
     436                 :            :     #define _MULTIPROCESSING_SEMLOCK_RELEASE_METHODDEF
     437                 :            : #endif /* !defined(_MULTIPROCESSING_SEMLOCK_RELEASE_METHODDEF) */
     438                 :            : 
     439                 :            : #ifndef _MULTIPROCESSING_SEMLOCK__REBUILD_METHODDEF
     440                 :            :     #define _MULTIPROCESSING_SEMLOCK__REBUILD_METHODDEF
     441                 :            : #endif /* !defined(_MULTIPROCESSING_SEMLOCK__REBUILD_METHODDEF) */
     442                 :            : 
     443                 :            : #ifndef _MULTIPROCESSING_SEMLOCK__COUNT_METHODDEF
     444                 :            :     #define _MULTIPROCESSING_SEMLOCK__COUNT_METHODDEF
     445                 :            : #endif /* !defined(_MULTIPROCESSING_SEMLOCK__COUNT_METHODDEF) */
     446                 :            : 
     447                 :            : #ifndef _MULTIPROCESSING_SEMLOCK__IS_MINE_METHODDEF
     448                 :            :     #define _MULTIPROCESSING_SEMLOCK__IS_MINE_METHODDEF
     449                 :            : #endif /* !defined(_MULTIPROCESSING_SEMLOCK__IS_MINE_METHODDEF) */
     450                 :            : 
     451                 :            : #ifndef _MULTIPROCESSING_SEMLOCK__GET_VALUE_METHODDEF
     452                 :            :     #define _MULTIPROCESSING_SEMLOCK__GET_VALUE_METHODDEF
     453                 :            : #endif /* !defined(_MULTIPROCESSING_SEMLOCK__GET_VALUE_METHODDEF) */
     454                 :            : 
     455                 :            : #ifndef _MULTIPROCESSING_SEMLOCK__IS_ZERO_METHODDEF
     456                 :            :     #define _MULTIPROCESSING_SEMLOCK__IS_ZERO_METHODDEF
     457                 :            : #endif /* !defined(_MULTIPROCESSING_SEMLOCK__IS_ZERO_METHODDEF) */
     458                 :            : 
     459                 :            : #ifndef _MULTIPROCESSING_SEMLOCK__AFTER_FORK_METHODDEF
     460                 :            :     #define _MULTIPROCESSING_SEMLOCK__AFTER_FORK_METHODDEF
     461                 :            : #endif /* !defined(_MULTIPROCESSING_SEMLOCK__AFTER_FORK_METHODDEF) */
     462                 :            : 
     463                 :            : #ifndef _MULTIPROCESSING_SEMLOCK___ENTER___METHODDEF
     464                 :            :     #define _MULTIPROCESSING_SEMLOCK___ENTER___METHODDEF
     465                 :            : #endif /* !defined(_MULTIPROCESSING_SEMLOCK___ENTER___METHODDEF) */
     466                 :            : 
     467                 :            : #ifndef _MULTIPROCESSING_SEMLOCK___EXIT___METHODDEF
     468                 :            :     #define _MULTIPROCESSING_SEMLOCK___EXIT___METHODDEF
     469                 :            : #endif /* !defined(_MULTIPROCESSING_SEMLOCK___EXIT___METHODDEF) */
     470                 :            : /*[clinic end generated code: output=64ba32544811c9e6 input=a9049054013a1b77]*/

Generated by: LCOV version 1.14