/* Generated by Cython 3.1.0a1 */

/* BEGIN: Cython Metadata
{
    "distutils": {
        "define_macros": [
            [
                "CYTHON_FAST_THREAD_STATE",
                "0"
            ]
        ],
        "depends": [
            "src/gevent/_gevent_c_hub_primitives.pxd"
        ],
        "include_dirs": [
            "/opt/local/Library/Frameworks/Python.framework/Versions/3.12/include/python3.12",
            "/opt/local/Library/Frameworks/Python.framework/Versions/3.12/include/python3.12",
            "/private/var/folders/y5/x7pvzk651c3dqkllbxd1jd280000gn/T/gevent-24.11.1-9s5kwjtd/gitclone/deps"
        ],
        "name": "gevent._gevent_c_hub_primitives",
        "sources": [
            "src/gevent/_hub_primitives.py"
        ]
    },
    "module_name": "gevent._gevent_c_hub_primitives"
}
END: Cython Metadata */

#ifndef PY_SSIZE_T_CLEAN
#define PY_SSIZE_T_CLEAN
#endif /* PY_SSIZE_T_CLEAN */
/* InitLimitedAPI */
#if defined(Py_LIMITED_API) && !defined(CYTHON_LIMITED_API)
  #define CYTHON_LIMITED_API 1
#endif

#include "Python.h"
#ifndef Py_PYTHON_H
    #error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x03080000
    #error Cython requires Python 3.8+.
#else
#define __PYX_ABI_VERSION "3_1_0a1"
#define CYTHON_HEX_VERSION 0x030100A1
#define CYTHON_FUTURE_DIVISION 1
/* CModulePreamble */
#include "src/gevent/_generated_include/CModulePreamble_impl_941d98049e3fd8807872998037213314e12faec8e797137dba13044b04d3fad7.h"
/* CInitCode */
#ifndef CYTHON_INLINE
  #if defined(__clang__)
    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
  #elif defined(__GNUC__)
    #define CYTHON_INLINE __inline__
  #elif defined(_MSC_VER)
    #define CYTHON_INLINE __inline
  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define CYTHON_INLINE inline
  #else
    #define CYTHON_INLINE
  #endif
#endif

/* PythonCompatibility */
#include "src/gevent/_generated_include/PythonCompatibility_impl_91b8e42eb5b86159feb7232a99a31a5e376de3b0c6261847b6292466eb4fb864.h"
/* MathInitCode */
#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
  #ifndef _USE_MATH_DEFINES
    #define _USE_MATH_DEFINES
  #endif
#endif
#include <math.h>
#ifdef NAN
#define __PYX_NAN() ((float) NAN)
#else
static CYTHON_INLINE float __PYX_NAN() {
  float value;
  memset(&value, 0xFF, sizeof(value));
  return value;
}
#endif
#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
#define __Pyx_truncl trunc
#else
#define __Pyx_truncl truncl
#endif

#ifndef CYTHON_CLINE_IN_TRACEBACK_RUNTIME
#define CYTHON_CLINE_IN_TRACEBACK_RUNTIME 0
#endif
#ifndef CYTHON_CLINE_IN_TRACEBACK
#define CYTHON_CLINE_IN_TRACEBACK CYTHON_CLINE_IN_TRACEBACK_RUNTIME
#endif
#if CYTHON_CLINE_IN_TRACEBACK
#define __PYX_MARK_ERR_POS(f_index, lineno)  { __pyx_filename = __pyx_f[f_index]; (void) __pyx_filename; __pyx_lineno = lineno; (void) __pyx_lineno; __pyx_clineno = __LINE__; (void) __pyx_clineno; }
#else
#define __PYX_MARK_ERR_POS(f_index, lineno)  { __pyx_filename = __pyx_f[f_index]; (void) __pyx_filename; __pyx_lineno = lineno; (void) __pyx_lineno; (void) __pyx_clineno; }
#endif
#define __PYX_ERR(f_index, lineno, Ln_error) \
    { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }

#ifdef CYTHON_EXTERN_C
    #undef __PYX_EXTERN_C
    #define __PYX_EXTERN_C CYTHON_EXTERN_C
#elif defined(__PYX_EXTERN_C)
    #ifdef _MSC_VER
    #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.")
    #else
    #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.
    #endif
#else
  #ifdef __cplusplus
    #define __PYX_EXTERN_C extern "C"
  #else
    #define __PYX_EXTERN_C extern
  #endif
#endif

#define __PYX_HAVE__gevent___gevent_c_hub_primitives
#define __PYX_HAVE_API__gevent___gevent_c_hub_primitives
/* Early includes */
#include "greenlet/greenlet.h"
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
#define CYTHON_WITHOUT_ASSERTIONS
#endif

#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
#define __PYX_DEFAULT_STRING_ENCODING ""
#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#define __Pyx_uchar_cast(c) ((unsigned char)c)
#define __Pyx_long_cast(x) ((long)x)
#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\
    (sizeof(type) < sizeof(Py_ssize_t))  ||\
    (sizeof(type) > sizeof(Py_ssize_t) &&\
          likely(v < (type)PY_SSIZE_T_MAX ||\
                 v == (type)PY_SSIZE_T_MAX)  &&\
          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
                                v == (type)PY_SSIZE_T_MIN)))  ||\
    (sizeof(type) == sizeof(Py_ssize_t) &&\
          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
                               v == (type)PY_SSIZE_T_MAX)))  )
static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
    return (size_t) i < (size_t) limit;
}
#if defined (__cplusplus) && __cplusplus >= 201103L
    #include <cstdlib>
    #define __Pyx_sst_abs(value) std::abs(value)
#elif SIZEOF_INT >= SIZEOF_SIZE_T
    #define __Pyx_sst_abs(value) abs(value)
#elif SIZEOF_LONG >= SIZEOF_SIZE_T
    #define __Pyx_sst_abs(value) labs(value)
#elif defined (_MSC_VER)
    #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define __Pyx_sst_abs(value) llabs(value)
#elif defined (__GNUC__)
    #define __Pyx_sst_abs(value) __builtin_llabs(value)
#else
    #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
#endif
static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s);
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*);
#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
#define __Pyx_PyBytes_FromString        PyBytes_FromString
#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
#if CYTHON_ASSUME_SAFE_MACROS
    #define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AS_STRING(s))
#else
    #define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AsString(s))
#endif
#define __Pyx_PyObject_AsWritableString(s)    ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
#define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
#define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
#define __Pyx_PyUnicode_FromOrdinal(o)       PyUnicode_FromOrdinal((int)o)
#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
static CYTHON_INLINE PyObject *__Pyx_NewRef(PyObject *obj) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030a0000 || defined(Py_NewRef)
    return Py_NewRef(obj);
#else
    Py_INCREF(obj);
    return obj;
#endif
}
static CYTHON_INLINE PyObject *__Pyx_XNewRef(PyObject *obj) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030a0000 || defined(Py_XNewRef)
    return Py_XNewRef(obj);
#else
    Py_XINCREF(obj);
    return obj;
#endif
}
#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Long(PyObject* x);
#define __Pyx_PySequence_Tuple(obj)\
    (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyLong_FromSize_t(size_t);
static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#if CYTHON_ASSUME_SAFE_MACROS
#define __Pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#define __Pyx_PyFloat_AS_DOUBLE(x) PyFloat_AS_DOUBLE(x)
#else
#define __Pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
#define __Pyx_PyFloat_AS_DOUBLE(x) PyFloat_AsDouble(x)
#endif
#define __Pyx_PyFloat_AsFloat(x) ((float) __Pyx_PyFloat_AsDouble(x))
#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
#if CYTHON_USE_PYLONG_INTERNALS
  #if PY_VERSION_HEX >= 0x030C00A7
  #ifndef _PyLong_SIGN_MASK
    #define _PyLong_SIGN_MASK 3
  #endif
  #ifndef _PyLong_NON_SIZE_BITS
    #define _PyLong_NON_SIZE_BITS 3
  #endif
  #define __Pyx_PyLong_Sign(x)  (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK)
  #define __Pyx_PyLong_IsNeg(x)  ((__Pyx_PyLong_Sign(x) & 2) != 0)
  #define __Pyx_PyLong_IsNonNeg(x)  (!__Pyx_PyLong_IsNeg(x))
  #define __Pyx_PyLong_IsZero(x)  (__Pyx_PyLong_Sign(x) & 1)
  #define __Pyx_PyLong_IsPos(x)  (__Pyx_PyLong_Sign(x) == 0)
  #define __Pyx_PyLong_CompactValueUnsigned(x)  (__Pyx_PyLong_Digits(x)[0])
  #define __Pyx_PyLong_DigitCount(x)  ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS))
  #define __Pyx_PyLong_SignedDigitCount(x)\
        ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x))
  #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue)
    #define __Pyx_PyLong_IsCompact(x)     PyUnstable_Long_IsCompact((PyLongObject*) x)
    #define __Pyx_PyLong_CompactValue(x)  PyUnstable_Long_CompactValue((PyLongObject*) x)
  #else
    #define __Pyx_PyLong_IsCompact(x)     (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS))
    #define __Pyx_PyLong_CompactValue(x)  ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0])
  #endif
  typedef Py_ssize_t  __Pyx_compact_pylong;
  typedef size_t  __Pyx_compact_upylong;
  #else
  #define __Pyx_PyLong_IsNeg(x)  (Py_SIZE(x) < 0)
  #define __Pyx_PyLong_IsNonNeg(x)  (Py_SIZE(x) >= 0)
  #define __Pyx_PyLong_IsZero(x)  (Py_SIZE(x) == 0)
  #define __Pyx_PyLong_IsPos(x)  (Py_SIZE(x) > 0)
  #define __Pyx_PyLong_CompactValueUnsigned(x)  ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0])
  #define __Pyx_PyLong_DigitCount(x)  __Pyx_sst_abs(Py_SIZE(x))
  #define __Pyx_PyLong_SignedDigitCount(x)  Py_SIZE(x)
  #define __Pyx_PyLong_IsCompact(x)  (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1)
  #define __Pyx_PyLong_CompactValue(x)\
        ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0]))
  typedef sdigit  __Pyx_compact_pylong;
  typedef digit  __Pyx_compact_upylong;
  #endif
  #if PY_VERSION_HEX >= 0x030C00A5
  #define __Pyx_PyLong_Digits(x)  (((PyLongObject*)x)->long_value.ob_digit)
  #else
  #define __Pyx_PyLong_Digits(x)  (((PyLongObject*)x)->ob_digit)
  #endif
#endif
#if __PYX_DEFAULT_STRING_ENCODING_IS_UTF8
  #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
#elif __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
  #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeASCII(c_str, size, NULL)
#else
  #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
#endif


/* Test for GCC > 2.95 */
#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
  #define likely(x)   __builtin_expect(!!(x), 1)
  #define unlikely(x) __builtin_expect(!!(x), 0)
#else /* !__GNUC__ or GCC < 2.95 */
  #define likely(x)   (x)
  #define unlikely(x) (x)
#endif /* __GNUC__ */
/* PretendToInitialize */
#ifdef __cplusplus
#include <type_traits>
template <typename T>
static void __Pyx_pretend_to_initialize(T* ptr) {
#if __cplusplus > 201103L
    if ((std::is_trivially_default_constructible<T>::value))
#endif
        *ptr = T();
    (void)ptr;
}
#else
static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
#endif


#if !CYTHON_USE_MODULE_STATE
static PyObject *__pyx_m = NULL;
#endif
static int __pyx_lineno;
static int __pyx_clineno = 0;
static const char * const __pyx_cfilenm = __FILE__;
static const char *__pyx_filename;

/* #### Code section: filename_table ### */

static const char* const __pyx_f[] = {
  "src/gevent/_hub_primitives.py",
  "src/gevent/_gevent_c_greenlet_primitives.pxd",
  "src/gevent/_gevent_c_waiter.pxd",
  "src/gevent/_gevent_c_hub_primitives.pxd",
};
/* #### Code section: utility_code_proto_before_types ### */
/* IncludeStructmemberH.proto */
#include <structmember.h>

/* #### Code section: numeric_typedefs ### */
/* #### Code section: complex_type_declarations ### */
/* #### Code section: type_declarations ### */

/*--- Type declarations ---*/
struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_TrackedRawGreenlet;
struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop;
struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter;
struct __pyx_obj_6gevent_16_gevent_c_waiter_MultipleWaiter;
struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet;
struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator;
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_cancel_wait;
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_iwait_on_objects;
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_objects;
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_watcher;
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_read;
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_write;
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_readwrite;
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_socket;

/* "gevent/_gevent_c_hub_primitives.pxd":44
 *     # The Hub will extend this class.
 *     cpdef wait(self, watcher)
 *     cpdef cancel_wait(self, watcher, error, close_watcher=*)             # <<<<<<<<<<<<<<
 *     cpdef _cancel_wait(self, watcher, error, close_watcher)
 * 
*/
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_cancel_wait {
  int __pyx_n;
  PyObject *close_watcher;
};

/* "gevent/_gevent_c_hub_primitives.pxd":65
 * 
 * 
 * cpdef iwait_on_objects(objects, timeout=*, count=*)             # <<<<<<<<<<<<<<
 * cpdef wait_on_objects(objects=*, timeout=*, count=*)
 * 
*/
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_iwait_on_objects {
  int __pyx_n;
  PyObject *timeout;
  PyObject *count;
};

/* "gevent/_gevent_c_hub_primitives.pxd":66
 * 
 * cpdef iwait_on_objects(objects, timeout=*, count=*)
 * cpdef wait_on_objects(objects=*, timeout=*, count=*)             # <<<<<<<<<<<<<<
 * 
 * cdef _primitive_wait(watcher, timeout, timeout_exc, WaitOperationsGreenlet hub)
*/
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_objects {
  int __pyx_n;
  PyObject *objects;
  PyObject *timeout;
  PyObject *count;
};

/* "gevent/_gevent_c_hub_primitives.pxd":69
 * 
 * cdef _primitive_wait(watcher, timeout, timeout_exc, WaitOperationsGreenlet hub)
 * cpdef wait_on_watcher(watcher, timeout=*, timeout_exc=*, WaitOperationsGreenlet hub=*)             # <<<<<<<<<<<<<<
 * cpdef wait_read(fileno, timeout=*, timeout_exc=*)
 * cpdef wait_write(fileno, timeout=*, timeout_exc=*, event=*)
*/
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_watcher {
  int __pyx_n;
  PyObject *timeout;
  PyObject *timeout_exc;
  struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *hub;
};

/* "gevent/_gevent_c_hub_primitives.pxd":70
 * cdef _primitive_wait(watcher, timeout, timeout_exc, WaitOperationsGreenlet hub)
 * cpdef wait_on_watcher(watcher, timeout=*, timeout_exc=*, WaitOperationsGreenlet hub=*)
 * cpdef wait_read(fileno, timeout=*, timeout_exc=*)             # <<<<<<<<<<<<<<
 * cpdef wait_write(fileno, timeout=*, timeout_exc=*, event=*)
 * cpdef wait_readwrite(fileno, timeout=*, timeout_exc=*, event=*)
*/
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_read {
  int __pyx_n;
  PyObject *timeout;
  PyObject *timeout_exc;
};

/* "gevent/_gevent_c_hub_primitives.pxd":71
 * cpdef wait_on_watcher(watcher, timeout=*, timeout_exc=*, WaitOperationsGreenlet hub=*)
 * cpdef wait_read(fileno, timeout=*, timeout_exc=*)
 * cpdef wait_write(fileno, timeout=*, timeout_exc=*, event=*)             # <<<<<<<<<<<<<<
 * cpdef wait_readwrite(fileno, timeout=*, timeout_exc=*, event=*)
 * cpdef wait_on_socket(socket, watcher, timeout_exc=*)
*/
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_write {
  int __pyx_n;
  PyObject *timeout;
  PyObject *timeout_exc;
  PyObject *event;
};

/* "gevent/_gevent_c_hub_primitives.pxd":72
 * cpdef wait_read(fileno, timeout=*, timeout_exc=*)
 * cpdef wait_write(fileno, timeout=*, timeout_exc=*, event=*)
 * cpdef wait_readwrite(fileno, timeout=*, timeout_exc=*, event=*)             # <<<<<<<<<<<<<<
 * cpdef wait_on_socket(socket, watcher, timeout_exc=*)
*/
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_readwrite {
  int __pyx_n;
  PyObject *timeout;
  PyObject *timeout_exc;
  PyObject *event;
};

/* "gevent/_gevent_c_hub_primitives.pxd":73
 * cpdef wait_write(fileno, timeout=*, timeout_exc=*, event=*)
 * cpdef wait_readwrite(fileno, timeout=*, timeout_exc=*, event=*)
 * cpdef wait_on_socket(socket, watcher, timeout_exc=*)             # <<<<<<<<<<<<<<
*/
struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_socket {
  int __pyx_n;
  PyObject *timeout_exc;
};

/* "gevent/_gevent_c_greenlet_primitives.pxd":37
 *     return PyGreenlet_Switch(self, NULL, NULL)
 * 
 * cdef class TrackedRawGreenlet(greenlet):             # <<<<<<<<<<<<<<
 *     pass
 * 
*/
struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_TrackedRawGreenlet {
  PyGreenlet __pyx_base;
};


/* "gevent/_gevent_c_greenlet_primitives.pxd":40
 *     pass
 * 
 * cdef class SwitchOutGreenletWithLoop(TrackedRawGreenlet):             # <<<<<<<<<<<<<<
 *     cdef public loop
 * 
*/
struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop {
  struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_TrackedRawGreenlet __pyx_base;
  struct __pyx_vtabstruct_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *__pyx_vtab;
  PyObject *loop;
};


/* "gevent/_gevent_c_waiter.pxd":33
 *         _greenlet_imported = True
 * 
 * cdef class Waiter:             # <<<<<<<<<<<<<<
 *     cdef readonly SwitchOutGreenletWithLoop hub
 *     cdef readonly greenlet greenlet
*/
struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter {
  PyObject_HEAD
  struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_Waiter *__pyx_vtab;
  struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *hub;
  PyGreenlet *greenlet;
  PyObject *value;
  PyObject *_exception;
};


/* "gevent/_gevent_c_waiter.pxd":45
 *     #cpdef switch(self, value)
 * 
 * @cython.final             # <<<<<<<<<<<<<<
 * @cython.internal
 * cdef class MultipleWaiter(Waiter):
*/
struct __pyx_obj_6gevent_16_gevent_c_waiter_MultipleWaiter {
  struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter __pyx_base;
  PyObject *_values;
};


/* "gevent/_gevent_c_hub_primitives.pxd":41
 * 
 * 
 * cdef class WaitOperationsGreenlet(SwitchOutGreenletWithLoop):             # <<<<<<<<<<<<<<
 *     # The Hub will extend this class.
 *     cpdef wait(self, watcher)
*/
struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet {
  struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop __pyx_base;
};


/* "gevent/_gevent_c_hub_primitives.pxd":47
 *     cpdef _cancel_wait(self, watcher, error, close_watcher)
 * 
 * cdef class _WaitIterator:             # <<<<<<<<<<<<<<
 *     cdef SwitchOutGreenletWithLoop _hub
 *     cdef MultipleWaiter _waiter
*/
struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator {
  PyObject_HEAD
  struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_vtab;
  struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *_hub;
  struct __pyx_obj_6gevent_16_gevent_c_waiter_MultipleWaiter *_waiter;
  PyObject *_switch;
  PyObject *_timeout;
  PyObject *_objects;
  PyObject *_timer;
  Py_ssize_t _count;
  int _begun;
};



/* "gevent/_gevent_c_greenlet_primitives.pxd":40
 *     pass
 * 
 * cdef class SwitchOutGreenletWithLoop(TrackedRawGreenlet):             # <<<<<<<<<<<<<<
 *     cdef public loop
 * 
*/

struct __pyx_vtabstruct_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop {
  PyObject *(*__pyx_switch)(struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *, int __pyx_skip_dispatch);
  PyObject *(*switch_out)(struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *__pyx_vtabptr_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop;


/* "gevent/_gevent_c_waiter.pxd":33
 *         _greenlet_imported = True
 * 
 * cdef class Waiter:             # <<<<<<<<<<<<<<
 *     cdef readonly SwitchOutGreenletWithLoop hub
 *     cdef readonly greenlet greenlet
*/

struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_Waiter {
  PyObject *(*get)(struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter *, int __pyx_skip_dispatch);
  PyObject *(*clear)(struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_Waiter *__pyx_vtabptr_6gevent_16_gevent_c_waiter_Waiter;


/* "gevent/_gevent_c_waiter.pxd":45
 *     #cpdef switch(self, value)
 * 
 * @cython.final             # <<<<<<<<<<<<<<
 * @cython.internal
 * cdef class MultipleWaiter(Waiter):
*/

struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_MultipleWaiter {
  struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_Waiter __pyx_base;
};
static struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_MultipleWaiter *__pyx_vtabptr_6gevent_16_gevent_c_waiter_MultipleWaiter;


/* "src/gevent/_hub_primitives.py":44
 * ]
 * 
 * class WaitOperationsGreenlet(SwitchOutGreenletWithLoop): # pylint:disable=undefined-variable             # <<<<<<<<<<<<<<
 * 
 *     def wait(self, watcher):
*/

struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet {
  struct __pyx_vtabstruct_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop __pyx_base;
  PyObject *(*wait)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*cancel_wait)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *, PyObject *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_cancel_wait *__pyx_optional_args);
  PyObject *(*_cancel_wait)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_vtabptr_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet;


/* "src/gevent/_hub_primitives.py":131
 * 
 * 
 * class _WaitIterator(object):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, objects, hub, timeout, count):
*/

struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives__WaitIterator {
  PyObject *(*_begin)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *);
  PyObject *(*_cleanup)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *);
  PyObject *(*__pyx___enter__)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *, int __pyx_skip_dispatch);
  PyObject *(*__pyx___exit__)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_vtabptr_6gevent_24_gevent_c_hub_primitives__WaitIterator;
/* #### Code section: utility_code_proto ### */

/* --- Runtime support code (head) --- */
/* Refnanny.proto */
#include "src/gevent/_generated_include/Refnanny_proto_00d2ab1aa529311d487a88a16574063b4d3b8ffa11a25109d76165964b208920.h"
/* PyErrExceptionMatches.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
#else
#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
#endif

/* PyThreadStateGet.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
#define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;
#if PY_VERSION_HEX >= 0x030C00A6
#define __Pyx_PyErr_Occurred()  (__pyx_tstate->current_exception != NULL)
#define __Pyx_PyErr_CurrentExceptionType()  (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL)
#else
#define __Pyx_PyErr_Occurred()  (__pyx_tstate->curexc_type != NULL)
#define __Pyx_PyErr_CurrentExceptionType()  (__pyx_tstate->curexc_type)
#endif
#else
#define __Pyx_PyThreadState_declare
#define __Pyx_PyThreadState_assign
#define __Pyx_PyErr_Occurred()  (PyErr_Occurred() != NULL)
#define __Pyx_PyErr_CurrentExceptionType()  PyErr_Occurred()
#endif

/* PyErrFetchRestore.proto */
#include "src/gevent/_generated_include/PyErrFetchRestore_proto_b219ba96ee79f73e7240a9715dc835e7e817ccd9f4f99ab4145b09780817bd8a.h"
/* PyObjectGetAttrStr.proto */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
#endif

/* PyObjectGetAttrStrNoError.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);

/* GetBuiltinName.proto */
static PyObject *__Pyx_GetBuiltinName(PyObject *name);

/* TupleAndListFromArray.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n);
#endif
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n);
#endif

/* IncludeStringH.proto */
#include <string.h>

/* BytesEquals.proto */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);

/* UnicodeEquals.proto */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);

/* fastcall.proto */
#include "src/gevent/_generated_include/fastcall_proto_8cea709367b8feafccec276d23a8a09b17bdbba04a7ed4c30b05161b9c7bcc06.h"
/* PyDictVersioning.proto */
#include "src/gevent/_generated_include/PyDictVersioning_proto_3a4f44322900f3c5dea6a93f9058629fc141d705b4a4726b84bb4092d215fd10.h"
/* PyFunctionFastCall.proto */
#include "src/gevent/_generated_include/PyFunctionFastCall_proto_684a35efdb9c0de54ab9c3b27ea95f2eb084fd7d1c05f695deb3a512a084895b.h"
/* PyObjectCall.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
#else
#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
#endif

/* PyObjectCallMethO.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
#endif

/* PyObjectFastCall.proto */
#define __Pyx_PyObject_FastCall(func, args, nargs)  __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL)
static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs);

/* PyObjectCallOneArg.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);

/* PyObjectFormatAndDecref.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f);
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* s, PyObject* f);

/* JoinPyUnicode.proto */
static PyObject* __Pyx_PyUnicode_Join(PyObject** values, Py_ssize_t value_count, Py_ssize_t result_ulength,
                                      Py_UCS4 max_char);

/* RaiseException.proto */
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);

/* PyObjectCallNoArg.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);

/* GetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
#endif

/* SwapException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSwap(type, value, tb)  __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
#endif

/* GetTopmostException.proto */
#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
#endif

/* SaveResetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
#else
#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
#endif

/* RaiseArgTupleInvalid.proto */
static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);

/* RaiseDoubleKeywords.proto */
static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);

/* ParseKeywords.proto */
static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues,
    PyObject **argnames[],
    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,
    const char* function_name);

/* ListAppend.proto */
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
    PyListObject* L = (PyListObject*) list;
    Py_ssize_t len = Py_SIZE(list);
    if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
        Py_INCREF(x);
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
        L->ob_item[len] = x;
        #else
        PyList_SET_ITEM(list, len, x);
        #endif
        __Pyx_SET_SIZE(list, len + 1);
        return 0;
    }
    return PyList_Append(list, x);
}
#else
#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
#endif

/* GetAttr3.proto */
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);

/* ExtTypeTest.proto */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);

/* PyObjectVectorCallKwBuilder.proto */
CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n);
#if CYTHON_VECTORCALL
#if PY_VERSION_HEX >= 0x03090000
#define __Pyx_Object_Vectorcall_CallFromBuilder PyObject_Vectorcall
#else
#define __Pyx_Object_Vectorcall_CallFromBuilder _PyObject_Vectorcall
#endif
#define __Pyx_MakeVectorcallBuilderKwds(n) PyTuple_New(n)
static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n);
static int __Pyx_VectorcallBuilder_AddArgStr(const char *key, PyObject *value, PyObject *builder, PyObject **args, int n);
#else
#define __Pyx_Object_Vectorcall_CallFromBuilder __Pyx_PyObject_FastCallDict
#define __Pyx_MakeVectorcallBuilderKwds(n) PyDict_New()
#define __Pyx_VectorcallBuilder_AddArg(key, value, builder, args, n) PyDict_SetItem(builder, key, value)
#define __Pyx_VectorcallBuilder_AddArgStr(key, value, builder, args, n) PyDict_SetItemString(builder, key, value)
#endif

/* GetModuleGlobalName.proto */
#include "src/gevent/_generated_include/GetModuleGlobalName_proto_35020a92d25e00989051b6cce92e00e13fc50c1cb05740bd074404c24babc545.h"
/* PyObjectLookupSpecial.proto */
#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name)  __Pyx__PyObject_LookupSpecial(obj, attr_name, 0)
#define __Pyx_PyObject_LookupSpecial(obj, attr_name)  __Pyx__PyObject_LookupSpecial(obj, attr_name, 1)
static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error);
#else
#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n)
#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n)
#endif

/* ArgTypeTest.proto */
#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
    ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\
        __Pyx__ArgTypeTest(obj, type, name, exact))
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);

/* CallNextTpTraverse.proto */
static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse);

/* CallTypeTraverse.proto */
#if !CYTHON_USE_TYPE_SPECS || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x03090000)
#define __Pyx_call_type_traverse(o, always_call, visit, arg) 0
#else
static int __Pyx_call_type_traverse(PyObject *o, int always_call, visitproc visit, void *arg);
#endif

/* CallNextTpClear.proto */
static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear);

/* PyVersionSanityCheck.proto */
static int __Pyx_VersionSanityCheck(void);

/* TypeImport.proto */
#ifndef __PYX_HAVE_RT_ImportType_proto_3_1_0a1
#define __PYX_HAVE_RT_ImportType_proto_3_1_0a1
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#include <stdalign.h>
#endif
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L
#define __PYX_GET_STRUCT_ALIGNMENT_3_1_0a1(s) alignof(s)
#else
#define __PYX_GET_STRUCT_ALIGNMENT_3_1_0a1(s) sizeof(void*)
#endif
enum __Pyx_ImportType_CheckSize_3_1_0a1 {
   __Pyx_ImportType_CheckSize_Error_3_1_0a1 = 0,
   __Pyx_ImportType_CheckSize_Warn_3_1_0a1 = 1,
   __Pyx_ImportType_CheckSize_Ignore_3_1_0a1 = 2
};
static PyTypeObject *__Pyx_ImportType_3_1_0a1(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_1_0a1 check_size);
#endif

/* GetVTable.proto */
static void* __Pyx_GetVtable(PyTypeObject *type);

/* FixUpExtensionType.proto */
#if CYTHON_USE_TYPE_SPECS
static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type);
#endif

/* FormatTypeName.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
typedef PyObject *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%U"
static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp);
#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj)
#else
typedef const char *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%.200s"
#define __Pyx_PyType_GetName(tp) ((tp)->tp_name)
#define __Pyx_DECREF_TypeName(obj)
#endif

/* ValidateExternBase.proto */
static int __Pyx_validate_extern_base(PyTypeObject *base);

/* PyObjectGetMethod.proto */
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);

/* PyObjectCallMethod0.proto */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);

/* ValidateBasesTuple.proto */
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases);
#endif

/* PyType_Ready.proto */
CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t);

/* SetVTable.proto */
static int __Pyx_SetVtable(PyTypeObject* typeptr , void* vtable);

/* MergeVTables.proto */
static int __Pyx_MergeVtables(PyTypeObject *type);

/* Import.proto */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);

/* ImportDottedModule.proto */
static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple);
static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple);

/* ListPack.proto */
static PyObject *__Pyx_PyList_Pack(Py_ssize_t n, ...);

/* ImportFrom.proto */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);

/* FetchSharedCythonModule.proto */
static PyObject *__Pyx_FetchSharedCythonABIModule(void);

/* FetchCommonType.proto */
#if !CYTHON_USE_TYPE_SPECS
static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
#else
static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases);
#endif

/* PyMethodNew.proto */
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ);

/* PyVectorcallFastCallDict.proto */
#if CYTHON_METH_FASTCALL && (CYTHON_VECTORCALL || CYTHON_BACKPORT_VECTORCALL)
static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw);
#endif

/* CythonFunctionShared.proto */
#include "src/gevent/_generated_include/CythonFunctionShared_proto_5f08ce765caa222acad993e64642afd2c74bdfd73c8ae437c3b5115c911bab73.h"
/* CythonFunction.proto */
static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml,
                                      int flags, PyObject* qualname,
                                      PyObject *closure,
                                      PyObject *module, PyObject *globals,
                                      PyObject* code);

/* LimitedApiGetTypeDict.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *__Pyx_GetTypeDict(PyTypeObject *tp);
#endif

/* SetItemOnTypeDict.proto */
static int __Pyx__SetItemOnTypeDict(PyTypeObject *tp, PyObject *k, PyObject *v);
#define __Pyx_SetItemOnTypeDict(tp, k, v) __Pyx__SetItemOnTypeDict((PyTypeObject*)tp, k, v)

/* GetNameInClass.proto */
#define __Pyx_GetNameInClass(var, nmspace, name)  (var) = __Pyx__GetNameInClass(nmspace, name)
static PyObject *__Pyx__GetNameInClass(PyObject *nmspace, PyObject *name);

/* GetAttr.proto */
static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);

/* Globals.proto */
static PyObject* __Pyx_Globals(void);

/* CLineInTraceback.proto */
#if CYTHON_CLINE_IN_TRACEBACK && CYTHON_CLINE_IN_TRACEBACK_RUNTIME
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
#else
#define __Pyx_CLineForTraceback(tstate, c_line)  (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
#endif

/* CodeObjectCache.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
typedef PyObject __Pyx_CachedCodeObjectType;
#else
typedef PyCodeObject __Pyx_CachedCodeObjectType;
#endif
typedef struct {
    __Pyx_CachedCodeObjectType* code_object;
    int code_line;
} __Pyx_CodeObjectCacheEntry;
struct __Pyx_CodeObjectCache {
    int count;
    int max_count;
    __Pyx_CodeObjectCacheEntry* entries;
};
static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
static __Pyx_CachedCodeObjectType *__pyx_find_code_object(int code_line);
static void __pyx_insert_code_object(int code_line, __Pyx_CachedCodeObjectType* code_object);

/* AddTraceback.proto */
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename);

/* GCCDiagnostics.proto */
#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
#define __Pyx_HAS_GCC_DIAGNOSTIC
#endif

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_long(long value);

/* CIntFromPy.proto */
static CYTHON_INLINE long __Pyx_PyLong_As_long(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE int __Pyx_PyLong_As_int(PyObject *);

/* FastTypeChecks.proto */
#include "src/gevent/_generated_include/FastTypeChecks_proto_b6a1eb5ffa2a3fc9ebedcc671e034de99427399b8e4cbe35bbcd118ac87e0e6e.h"
/* GetRuntimeVersion.proto */
static unsigned long __Pyx_get_runtime_version(void);

/* CheckBinaryVersion.proto */
static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer);

/* PyObjectSetAttrStr.proto */
#if CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL)
static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value);
#else
#define __Pyx_PyObject_DelAttrStr(o,n)   PyObject_DelAttr(o,n)
#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
#endif

/* VoidPtrExport.proto */
static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig);

/* CFuncPtrTypedef.proto */
#ifndef __PYX_HAVE_RT_CFuncPtrTypedef_3_1_0a1
#define __PYX_HAVE_RT_CFuncPtrTypedef_3_1_0a1
typedef void (*__Pyx_generic_func_pointer_3_1_0a1)(void);
#endif

/* CFuncPtrToPy.proto */
static PyObject *__Pyx_c_func_ptr_to_capsule(__Pyx_generic_func_pointer_3_1_0a1 funcptr, const char* name);

/* FunctionExport.proto */
static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig);

/* VoidPtrImport.proto */
static int __Pyx_ImportVoidPtr_3_1_0a1(PyObject *module, const char *name, void **p, const char *sig);

/* CFuncPtrFromPy.proto */
#ifndef __PYX_HAVE_RT_CFuncPtrFromPy_3_1_0a1
#define __PYX_HAVE_RT_CFuncPtrFromPy_3_1_0a1
static __Pyx_generic_func_pointer_3_1_0a1 __Pyx_capsule_to_c_func_ptr_3_1_0a1(PyObject *capsule, const char* name) {
    void *data = PyCapsule_GetPointer(capsule, name);
    __Pyx_generic_func_pointer_3_1_0a1 funcptr;
#if defined(__Pyx_TEST_large_func_pointers) && __Pyx_TEST_large_func_pointers
    if ((1))
#else
    if (sizeof(funcptr) > sizeof(void*))
#endif
    {
        funcptr = *((__Pyx_generic_func_pointer_3_1_0a1*)data);
    } else {
        memcpy((void*)&funcptr, (void*)&data, sizeof(funcptr));
    }
    return funcptr;
}
#endif

/* FunctionImport.proto */
static int __Pyx_ImportFunction_3_1_0a1(PyObject *module, const char *funcname, void (**f)(void), const char *sig);

/* #### Code section: module_declarations ### */
/* CythonABIVersion.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
    #define __PYX_LIMITED_ABI_SUFFIX  "limited"
#else
    #define __PYX_LIMITED_ABI_SUFFIX
#endif
#ifndef __PYX_MONITORING_ABI_SUFFIX
    #define __PYX_MONITORING_ABI_SUFFIX
#endif
#if CYTHON_USE_TP_FINALIZE
    #define __PYX_TP_FINALIZE_ABI_SUFFIX
#else
    #define __PYX_TP_FINALIZE_ABI_SUFFIX "nofinalize"
#endif
#if CYTHON_USE_FREELISTS || !defined(__Pyx_AsyncGen_USED)
    #define __PYX_FREELISTS_ABI_SUFFIX
#else
    #define __PYX_FREELISTS_ABI_SUFFIX "nofreelists"
#endif
#define CYTHON_ABI  __PYX_ABI_VERSION __PYX_LIMITED_ABI_SUFFIX __PYX_MONITORING_ABI_SUFFIX __PYX_TP_FINALIZE_ABI_SUFFIX __PYX_FREELISTS_ABI_SUFFIX
#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."

static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_wait(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher, int __pyx_skip_dispatch); /* proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_cancel_wait(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher, PyObject *__pyx_v_error, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_cancel_wait *__pyx_optional_args); /* proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet__cancel_wait(CYTHON_UNUSED struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher, PyObject *__pyx_v_error, PyObject *__pyx_v_close_watcher, int __pyx_skip_dispatch); /* proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator__begin(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self); /* proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator__cleanup(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self); /* proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___enter__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___exit__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_typ, CYTHON_UNUSED PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v_tb, int __pyx_skip_dispatch); /* proto*/

/* Module declarations from "cython" */

/* Module declarations from "greenlet" */

/* Module declarations from "gevent._gevent_c_greenlet_primitives" */
static PyObject **__pyx_vp_6gevent_29_gevent_c_greenlet_primitives_get_objects = 0;
#define __pyx_v_6gevent_29_gevent_c_greenlet_primitives_get_objects (*__pyx_vp_6gevent_29_gevent_c_greenlet_primitives_get_objects)
static PyObject **__pyx_vp_6gevent_29_gevent_c_greenlet_primitives_wref = 0;
#define __pyx_v_6gevent_29_gevent_c_greenlet_primitives_wref (*__pyx_vp_6gevent_29_gevent_c_greenlet_primitives_wref)
static PyObject **__pyx_vp_6gevent_29_gevent_c_greenlet_primitives_BlockingSwitchOutError = 0;
#define __pyx_v_6gevent_29_gevent_c_greenlet_primitives_BlockingSwitchOutError (*__pyx_vp_6gevent_29_gevent_c_greenlet_primitives_BlockingSwitchOutError)
static int *__pyx_vp_6gevent_29_gevent_c_greenlet_primitives__greenlet_imported = 0;
#define __pyx_v_6gevent_29_gevent_c_greenlet_primitives__greenlet_imported (*__pyx_vp_6gevent_29_gevent_c_greenlet_primitives__greenlet_imported)
static PyTypeObject **__pyx_vp_6gevent_29_gevent_c_greenlet_primitives__memoryview = 0;
#define __pyx_v_6gevent_29_gevent_c_greenlet_primitives__memoryview (*__pyx_vp_6gevent_29_gevent_c_greenlet_primitives__memoryview)
static PyTypeObject **__pyx_vp_6gevent_29_gevent_c_greenlet_primitives__buffer = 0;
#define __pyx_v_6gevent_29_gevent_c_greenlet_primitives__buffer (*__pyx_vp_6gevent_29_gevent_c_greenlet_primitives__buffer)

/* Module declarations from "gevent._gevent_c_hub_local" */
static PyObject **__pyx_vp_6gevent_19_gevent_c_hub_local__threadlocal = 0;
#define __pyx_v_6gevent_19_gevent_c_hub_local__threadlocal (*__pyx_vp_6gevent_19_gevent_c_hub_local__threadlocal)
static struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *(*__pyx_f_6gevent_19_gevent_c_hub_local_get_hub_noargs)(int __pyx_skip_dispatch); /*proto*/

/* Module declarations from "gevent._gevent_c_waiter" */
static PyObject **__pyx_vp_6gevent_16_gevent_c_waiter_sys = 0;
#define __pyx_v_6gevent_16_gevent_c_waiter_sys (*__pyx_vp_6gevent_16_gevent_c_waiter_sys)
static PyObject **__pyx_vp_6gevent_16_gevent_c_waiter_ConcurrentObjectUseError = 0;
#define __pyx_v_6gevent_16_gevent_c_waiter_ConcurrentObjectUseError (*__pyx_vp_6gevent_16_gevent_c_waiter_ConcurrentObjectUseError)
static int *__pyx_vp_6gevent_16_gevent_c_waiter__greenlet_imported = 0;
#define __pyx_v_6gevent_16_gevent_c_waiter__greenlet_imported (*__pyx_vp_6gevent_16_gevent_c_waiter__greenlet_imported)
static PyObject **__pyx_vp_6gevent_16_gevent_c_waiter__NONE = 0;
#define __pyx_v_6gevent_16_gevent_c_waiter__NONE (*__pyx_vp_6gevent_16_gevent_c_waiter__NONE)

/* Module declarations from "gevent._gevent_c_hub_primitives" */
static PyObject *__pyx_v_6gevent_24_gevent_c_hub_primitives_InvalidSwitchError = 0;
static PyObject *__pyx_v_6gevent_24_gevent_c_hub_primitives__waiter = 0;
static PyObject *__pyx_v_6gevent_24_gevent_c_hub_primitives__greenlet_primitives = 0;
static PyObject *__pyx_v_6gevent_24_gevent_c_hub_primitives_traceback = 0;
static PyObject *__pyx_v_6gevent_24_gevent_c_hub_primitives__timeout_error = 0;
static PyObject *__pyx_v_6gevent_24_gevent_c_hub_primitives_Timeout = 0;
static int __pyx_v_6gevent_24_gevent_c_hub_primitives__greenlet_imported;
static CYTHON_INLINE PyGreenlet *__pyx_f_6gevent_24_gevent_c_hub_primitives_getcurrent(void); /*proto*/
static CYTHON_INLINE void __pyx_f_6gevent_24_gevent_c_hub_primitives_greenlet_init(void); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_iwait_on_objects(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_iwait_on_objects *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_objects(int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_objects *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives__primitive_wait(PyObject *, PyObject *, PyObject *, struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_watcher(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_watcher *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_read(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_read *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_write(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_write *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_readwrite(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_readwrite *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_socket(PyObject *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_socket *__pyx_optional_args); /*proto*/
/* #### Code section: typeinfo ### */
/* #### Code section: before_global_var ### */
#define __Pyx_MODULE_NAME "gevent._gevent_c_hub_primitives"
extern int __pyx_module_is_main_gevent___gevent_c_hub_primitives;
int __pyx_module_is_main_gevent___gevent_c_hub_primitives = 0;

/* Implementation of "gevent._gevent_c_hub_primitives" */
/* #### Code section: global_var ### */
static PyObject *__pyx_builtin___import__;
static PyObject *__pyx_builtin_StopIteration;
/* #### Code section: string_decls ### */
static const char __pyx_k_[] = ")";
static const char __pyx_k_Q[] = "\200\001\330\004\005\330\004\025\220Q";
static const char __pyx_k_e[] = "e";
static const char __pyx_k_HA[] = "\230H\240A";
static const char __pyx_k__8[] = "?";
static const char __pyx_k__9[] = ".";
static const char __pyx_k_gc[] = "gc";
static const char __pyx_k_io[] = "io";
static const char __pyx_k_tb[] = "tb";
static const char __pyx_k_A_q[] = "\200A\330\010\017\210q";
static const char __pyx_k__10[] = "\200\001\330\004\021\220\021";
static const char __pyx_k_all[] = "__all__";
static const char __pyx_k_got[] = ": got ";
static const char __pyx_k_hub[] = "hub";
static const char __pyx_k_typ[] = "typ";
static const char __pyx_k_A_IQ[] = "\200A\330\010\014\210I\220Q";
static const char __pyx_k_NONE[] = "_NONE";
static const char __pyx_k_dict[] = "__dict__";
static const char __pyx_k_exit[] = "__exit__";
static const char __pyx_k_func[] = "__func__";
static const char __pyx_k_init[] = "_init";
static const char __pyx_k_join[] = "join";
static const char __pyx_k_main[] = "__main__";
static const char __pyx_k_name[] = "__name__";
static const char __pyx_k_next[] = "__next__";
static const char __pyx_k_self[] = "__self__";
static const char __pyx_k_spec[] = "__spec__";
static const char __pyx_k_stop[] = "stop";
static const char __pyx_k_test[] = "__test__";
static const char __pyx_k_then[] = "then";
static const char __pyx_k_wait[] = "wait";
static const char __pyx_k_with[] = " with ";
static const char __pyx_k_close[] = "close";
static const char __pyx_k_count[] = "count";
static const char __pyx_k_enter[] = "__enter__";
static const char __pyx_k_error[] = "error";
static const char __pyx_k_event[] = "event";
static const char __pyx_k_start[] = "start";
static const char __pyx_k_throw[] = "throw";
static const char __pyx_k_timer[] = "timer";
static const char __pyx_k_value[] = "value";
static const char __pyx_k_Waiter[] = "Waiter";
static const char __pyx_k_active[] = "active";
static const char __pyx_k_enable[] = "enable";
static const char __pyx_k_fileno[] = "fileno";
static const char __pyx_k_gevent[] = "gevent";
static const char __pyx_k_import[] = "__import__";
static const char __pyx_k_lambda[] = "<lambda>";
static const char __pyx_k_next_2[] = "next";
static const char __pyx_k_self_2[] = "self";
static const char __pyx_k_socket[] = "socket";
static const char __pyx_k_switch[] = "switch";
static const char __pyx_k_unlink[] = "unlink";
static const char __pyx_k_waiter[] = "_waiter";
static const char __pyx_k_Timeout[] = "Timeout";
static const char __pyx_k_disable[] = "disable";
static const char __pyx_k_objects[] = "objects";
static const char __pyx_k_rawlink[] = "rawlink";
static const char __pyx_k_timeout[] = "timeout";
static const char __pyx_k_watcher[] = "watcher";
static const char __pyx_k_add_note[] = "add_note";
static const char __pyx_k_callback[] = "callback";
static const char __pyx_k_deferred[] = "deferred";
static const char __pyx_k_exc_kind[] = "exc_kind";
static const char __pyx_k_expected[] = " (expected ";
static const char __pyx_k_greenlet[] = "greenlet";
static const char __pyx_k_priority[] = "priority";
static const char __pyx_k_pyx_capi[] = "__pyx_capi__";
static const char __pyx_k_set_name[] = "__set_name__";
static const char __pyx_k_watchers[] = "watchers";
static const char __pyx_k_7_0_1IYm1[] = "\320\000%\320%7\260{\300!\3600\000\005\024\2201\220I\230Y\240m\2601";
static const char __pyx_k_isenabled[] = "isenabled";
static const char __pyx_k_print_exc[] = "print_exc";
static const char __pyx_k_then_args[] = "then_args";
static const char __pyx_k_timed_out[] = "timed out";
static const char __pyx_k_traceback[] = "traceback";
static const char __pyx_k_wait_read[] = "wait_read";
static const char __pyx_k_getcurrent[] = "getcurrent";
static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
static const char __pyx_k_wait_write[] = "wait_write";
static const char __pyx_k_waiting_on[] = "; waiting on ";
static const char __pyx_k_A_Kq_Qiz_Ba[] = "\200A\330\010\014\210K\220q\330\014\020\220\r\230Q\230i\240z\260\021\330\010\014\210B\210a";
static const char __pyx_k_cancel_wait[] = "cancel_wait";
static const char __pyx_k_timeout_exc[] = "timeout_exc";
static const char __pyx_k_0_E_AXQ_at9M[] = "\320\000\036\320\0360\260\001\360\026\000\005\013\210'\220\021\330\004\t\210\023\210E\220\023\220A\220X\230Q\330\004\005\330\010\017\210\230a\230t\2409\250M\270\021\340\010\n\210&\220\001";
static const char __pyx_k_5_E_AXQ_at9M[] = "\320\000#\320#5\260]\300!\360\"\000\005\013\210'\220\021\330\004\t\210\023\210E\220\023\220A\220X\230Q\330\004\005\330\010\017\210\230a\230t\2409\250M\270\021\340\010\n\210&\220\001";
static const char __pyx_k_WaitIterator[] = "_WaitIterator";
static const char __pyx_k_gevent__util[] = "gevent._util";
static const char __pyx_k_initializing[] = "_initializing";
static const char __pyx_k_is_coroutine[] = "_is_coroutine";
static const char __pyx_k_l_B_xs_q_5_y[] = "\320\000&\240l\260!\360B\001\000\005\013\210'\220\021\330\004\007\200x\210s\220!\330\010\017\210q\220\003\2205\230\001\230\030\240\021\330\004\013\210=\230\001\230\031\240%\240y\260\001";
static const char __pyx_k_run_callback[] = "run_callback";
static const char __pyx_k_StopIteration[] = "StopIteration";
static const char __pyx_k_cancel_wait_2[] = "_cancel_wait";
static const char __pyx_k_close_watcher[] = "close_watcher";
static const char __pyx_k_greenlet_init[] = "greenlet_init";
static const char __pyx_k_timeout_error[] = "_timeout_error";
static const char __pyx_k_1_a_E_AXQ_at9M[] = "\320\000\037\320\0371\260\035\270a\360 \000\005\013\210'\220\021\330\004\t\210\023\210E\220\023\220A\220X\230Q\330\004\005\330\010\017\210\230a\230t\2409\250M\270\021\340\010\n\210&\220\001";
static const char __pyx_k_MultipleWaiter[] = "MultipleWaiter";
static const char __pyx_k_get_hub_noargs[] = "get_hub_noargs";
static const char __pyx_k_gevent_timeout[] = "gevent.timeout";
static const char __pyx_k_import_c_accel[] = "import_c_accel";
static const char __pyx_k_wait_on_socket[] = "wait_on_socket";
static const char __pyx_k_wait_readwrite[] = "wait_readwrite";
static const char __pyx_k_wait_on_objects[] = "wait_on_objects";
static const char __pyx_k_wait_on_watcher[] = "wait_on_watcher";
static const char __pyx_k_iwait_on_objects[] = "iwait_on_objects";
static const char __pyx_k_cancel_waits_then[] = "_cancel_waits_then";
static const char __pyx_k_gevent__hub_local[] = "gevent._hub_local";
static const char __pyx_k_gevent_exceptions[] = "gevent.exceptions";
static const char __pyx_k_greenlet_imported[] = "_greenlet_imported";
static const char __pyx_k_InvalidSwitchError[] = "InvalidSwitchError";
static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines";
static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
static const char __pyx_k_start_new_or_dummy[] = "_start_new_or_dummy";
static const char __pyx_k_0_wc_c_A_aq_1IV1_wj[] = "\320\0000\260\001\330\004\007\200w\210c\220\025\220c\230\030\240\023\240A\360\006\000\t\017\320\016&\240a\240q\330\004\023\2201\220I\230V\2401\330\024#\240<\250w\260j\300\001\330\024\032\230!";
static const char __pyx_k_A_q_vQfIQ_V4q_wgQ_5[] = "\200A\360\014\000\t\022\220\026\220q\230\001\330\010\017\210v\220Q\220f\230I\240Q\330\010\t\330\014\025\220V\2304\230q\330\014\017\210w\220g\230Q\330\020\026\320\026(\250\001\330\024\025\330\030\"\240!\330\030\031\330\030\031\330\030\031\330\030\031\360\010\000\r\024\2205\230\001";
static const char __pyx_k_Invalid_switch_into[] = "Invalid switch into ";
static const char __pyx_k_N_aD_xs_gQ_s_q_4q_1[] = "\320\000\034\230N\250,\260a\360D\001\000\005\010\200x\210s\220!\330\010\016\210g\220Q\330\010\017\210s\220%\220q\230\010\240\001\330\004\013\2104\210q\320\020 \240\001\240\031\250)\2601";
static const char __pyx_k_WaitIterator___exit[] = "_WaitIterator.__exit__";
static const char __pyx_k_greenlet_primitives[] = "_greenlet_primitives";
static const char __pyx_k_8_83a_7_G1_4_iwa_1_6[] = "\320\0048\270\001\360\032\000\t\014\2108\2203\220a\360\006\000\r\016\340\010\013\2107\220*\230G\2401\330\014\020\220\005\220]\240!\2404\240\260i\270w\300a\330\014\r\340\010\013\2101\330\014\023\2206\230\021";
static const char __pyx_k_WaitIterator___enter[] = "_WaitIterator.__enter__";
static const char __pyx_k_WaitOperationsGreenlet[] = "WaitOperationsGreenlet";
static const char __pyx_k_gevent___hub_primitives[] = "gevent.__hub_primitives";
static const char __pyx_k_A_WA_1_6_1_7_4_1_uG1_F_1[] = "\200A\360\016\000\t\022\220\027\230\001\330\010\r\210W\220A\330\010\013\2101\330\014\023\2206\230\021\330\010\013\2101\340\014\023\2207\230!\2304\230|\2501\330\014\017\210u\220G\2301\330\020\024\220F\230!\2301";
static const char __pyx_k_ConcurrentObjectUseError[] = "ConcurrentObjectUseError";
static const char __pyx_k_SwitchOutGreenletWithLoop[] = "SwitchOutGreenletWithLoop";
static const char __pyx_k_set_default_timeout_error[] = "set_default_timeout_error";
static const char __pyx_k_WaitOperationsGreenlet_wait[] = "WaitOperationsGreenlet.wait";
static const char __pyx_k_cancel_waits_close_and_then[] = "cancel_waits_close_and_then";
static const char __pyx_k_src_gevent__hub_primitives_py[] = "src/gevent/_hub_primitives.py";
static const char __pyx_k_A_1_Kq_xs_wj_1_vQ_q_1_4_JjPVVW[] = "\200A\330\010\023\2201\330\010\014\210K\220q\330\014\017\210x\220s\230!\330\020\021\330\014\017\210w\220j\240\003\2401\330\020\027\220v\230Q\340\020\030\230\007\230q\240\001\330\010\013\2101\330\014\020\220\005\220]\240!\2404\320'<\270J\300j\320PV\320VW\340\014\020\220\002\220!";
static const char __pyx_k_A_collection_of_primitives_used[] = "\nA collection of primitives used by the hub, and suitable for\ncompilation with Cython because of their frequency of use.\n\n\n";
static const char __pyx_k_gevent__gevent_c_hub_primitives[] = "gevent._gevent_c_hub_primitives";
static const char __pyx_k_Note_that_Cython_is_deliberately[] = "Note that Cython is deliberately stricter than PEP-484 and rejects subclasses of builtin types. If you need to pass subclasses then set the 'annotation_typing' directive to False.";
static const char __pyx_k_The_socket_has_already_been_clos[] = "The socket has already been closed by another greenlet";
static const char __pyx_k_This_socket_is_already_used_by_a[] = "This socket is already used by another greenlet: ";
static const char __pyx_k_WaitOperationsGreenlet__cancel_w[] = "WaitOperationsGreenlet._cancel_waits_then";
static const char __pyx_k_WaitOperationsGreenlet_cancel_wa[] = "WaitOperationsGreenlet.cancel_waits_close_and_then";
static const char __pyx_k_WaitOperationsGreenlet__cancel_w_2[] = "WaitOperationsGreenlet._cancel_wait";
static const char __pyx_k_WaitOperationsGreenlet_cancel_wa_2[] = "WaitOperationsGreenlet.cancel_wait";
/* #### Code section: decls ### */
static PyObject *__pyx_lambda_funcdef_6gevent_24_gevent_c_hub_primitives_lambda(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_wait(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_2cancel_waits_close_and_then(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watchers, PyObject *__pyx_v_exc_kind, PyObject *__pyx_v_then, PyObject *__pyx_v_then_args); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_4_cancel_waits_then(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watchers, PyObject *__pyx_v_exc_kind, PyObject *__pyx_v_then, PyObject *__pyx_v_then_args); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_6cancel_wait(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher, PyObject *__pyx_v_error, PyObject *__pyx_v_close_watcher); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_8_cancel_wait(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher, PyObject *__pyx_v_error, PyObject *__pyx_v_close_watcher); /* proto */
static int __pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___init__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self, PyObject *__pyx_v_objects, PyObject *__pyx_v_hub, PyObject *__pyx_v_timeout, PyObject *__pyx_v_count); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_2__iter__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_4__next__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_6__enter__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_8__exit__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self, PyObject *__pyx_v_typ, PyObject *__pyx_v_value, PyObject *__pyx_v_tb); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_iwait_on_objects(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_objects, PyObject *__pyx_v_timeout, PyObject *__pyx_v_count); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_2wait_on_objects(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_objects, PyObject *__pyx_v_timeout, PyObject *__pyx_v_count); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_4set_default_timeout_error(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_e); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_6wait_on_socket(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_socket, PyObject *__pyx_v_watcher, PyObject *__pyx_v_timeout_exc); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_8wait_on_watcher(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_watcher, PyObject *__pyx_v_timeout, PyObject *__pyx_v_timeout_exc, struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_hub); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_10wait_read(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fileno, PyObject *__pyx_v_timeout, PyObject *__pyx_v_timeout_exc); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_12wait_write(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fileno, PyObject *__pyx_v_timeout, PyObject *__pyx_v_timeout_exc, PyObject *__pyx_v_event); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_14wait_readwrite(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fileno, PyObject *__pyx_v_timeout, PyObject *__pyx_v_timeout_exc, PyObject *__pyx_v_event); /* proto */
static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_16_init(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_tp_new_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gevent_24_gevent_c_hub_primitives__WaitIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
/* #### Code section: late_includes ### */
/* #### Code section: module_state ### */
/* SmallCodeConfig */
#ifndef CYTHON_SMALL_CODE
#if defined(__clang__)
    #define CYTHON_SMALL_CODE
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
    #define CYTHON_SMALL_CODE __attribute__((cold))
#else
    #define CYTHON_SMALL_CODE
#endif
#endif

typedef struct {
  PyObject *__pyx_d;
  PyObject *__pyx_b;
  PyObject *__pyx_cython_runtime;
  PyObject *__pyx_empty_tuple;
  PyObject *__pyx_empty_bytes;
  PyObject *__pyx_empty_unicode;
  #ifdef __Pyx_CyFunction_USED
  PyTypeObject *__pyx_CyFunctionType;
  #endif
  #ifdef __Pyx_FusedFunction_USED
  PyTypeObject *__pyx_FusedFunctionType;
  #endif
  #ifdef __Pyx_Generator_USED
  PyTypeObject *__pyx_GeneratorType;
  #endif
  #ifdef __Pyx_IterableCoroutine_USED
  PyTypeObject *__pyx_IterableCoroutineType;
  #endif
  #ifdef __Pyx_Coroutine_USED
  PyTypeObject *__pyx_CoroutineAwaitType;
  #endif
  #ifdef __Pyx_Coroutine_USED
  PyTypeObject *__pyx_CoroutineType;
  #endif
  PyTypeObject *__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_greenlet;
  PyTypeObject *__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_TrackedRawGreenlet;
  PyTypeObject *__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop;
  PyTypeObject *__pyx_ptype_6gevent_16_gevent_c_waiter_greenlet;
  PyTypeObject *__pyx_ptype_6gevent_16_gevent_c_waiter_Waiter;
  PyTypeObject *__pyx_ptype_6gevent_16_gevent_c_waiter_MultipleWaiter;
  PyObject *__pyx_type_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet;
  PyObject *__pyx_type_6gevent_24_gevent_c_hub_primitives__WaitIterator;
  PyTypeObject *__pyx_ptype_6gevent_24_gevent_c_hub_primitives_greenlet;
  PyTypeObject *__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet;
  PyTypeObject *__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator;
  PyObject *__pyx_k__2;
  PyObject *__pyx_k__3;
  PyObject *__pyx_k__4;
  PyObject *__pyx_k__5;
  PyObject *__pyx_k__6;
  PyObject *__pyx_k__7;
  PyObject *__pyx_tuple[5];
  PyObject *__pyx_codeobj_tab[17];
  PyObject *__pyx_string_tab[124];
  PyObject *__pyx_int_1;
  PyObject *__pyx_int_2;
  PyObject *__pyx_int_3;
  PyObject *__pyx_int_neg_1;
/* #### Code section: module_state_contents ### */
/* CachedMethodType.module_state_decls */
#if CYTHON_COMPILING_IN_LIMITED_API
PyObject *__Pyx_CachedMethodType;
#endif

/* #### Code section: module_state_end ### */
} __pyx_mstatetype;

#if CYTHON_USE_MODULE_STATE
#ifdef __cplusplus
namespace {
extern struct PyModuleDef __pyx_moduledef;
} /* anonymous namespace */
#else
static struct PyModuleDef __pyx_moduledef;
#endif

#define __pyx_mstate_global (__Pyx_PyModule_GetState(PyState_FindModule(&__pyx_moduledef)))

#define __pyx_m (PyState_FindModule(&__pyx_moduledef))
#else
static __pyx_mstatetype __pyx_mstate_global_static =
#ifdef __cplusplus
    {};
#else
    {0};
#endif
static __pyx_mstatetype *__pyx_mstate_global = &__pyx_mstate_global_static;
#endif
/* #### Code section: constant_name_defines ### */
#define __pyx_kp_u_ __pyx_string_tab[0]
#define __pyx_n_u_ConcurrentObjectUseError __pyx_string_tab[1]
#define __pyx_n_u_InvalidSwitchError __pyx_string_tab[2]
#define __pyx_kp_u_Invalid_switch_into __pyx_string_tab[3]
#define __pyx_n_u_MultipleWaiter __pyx_string_tab[4]
#define __pyx_n_u_NONE __pyx_string_tab[5]
#define __pyx_kp_u_Note_that_Cython_is_deliberately __pyx_string_tab[6]
#define __pyx_n_u_StopIteration __pyx_string_tab[7]
#define __pyx_n_u_SwitchOutGreenletWithLoop __pyx_string_tab[8]
#define __pyx_kp_u_The_socket_has_already_been_clos __pyx_string_tab[9]
#define __pyx_kp_u_This_socket_is_already_used_by_a __pyx_string_tab[10]
#define __pyx_n_u_Timeout __pyx_string_tab[11]
#define __pyx_n_u_WaitIterator __pyx_string_tab[12]
#define __pyx_n_u_WaitIterator___enter __pyx_string_tab[13]
#define __pyx_n_u_WaitIterator___exit __pyx_string_tab[14]
#define __pyx_n_u_WaitOperationsGreenlet __pyx_string_tab[15]
#define __pyx_n_u_WaitOperationsGreenlet__cancel_w __pyx_string_tab[16]
#define __pyx_n_u_WaitOperationsGreenlet__cancel_w_2 __pyx_string_tab[17]
#define __pyx_n_u_WaitOperationsGreenlet_cancel_wa __pyx_string_tab[18]
#define __pyx_n_u_WaitOperationsGreenlet_cancel_wa_2 __pyx_string_tab[19]
#define __pyx_n_u_WaitOperationsGreenlet_wait __pyx_string_tab[20]
#define __pyx_n_u_Waiter __pyx_string_tab[21]
#define __pyx_kp_u__8 __pyx_string_tab[22]
#define __pyx_kp_u__9 __pyx_string_tab[23]
#define __pyx_n_u_active __pyx_string_tab[24]
#define __pyx_kp_u_add_note __pyx_string_tab[25]
#define __pyx_n_u_all __pyx_string_tab[26]
#define __pyx_n_u_asyncio_coroutines __pyx_string_tab[27]
#define __pyx_n_u_callback __pyx_string_tab[28]
#define __pyx_n_u_cancel_wait __pyx_string_tab[29]
#define __pyx_n_u_cancel_wait_2 __pyx_string_tab[30]
#define __pyx_n_u_cancel_waits_close_and_then __pyx_string_tab[31]
#define __pyx_n_u_cancel_waits_then __pyx_string_tab[32]
#define __pyx_n_u_cline_in_traceback __pyx_string_tab[33]
#define __pyx_n_u_close __pyx_string_tab[34]
#define __pyx_n_u_close_watcher __pyx_string_tab[35]
#define __pyx_n_u_count __pyx_string_tab[36]
#define __pyx_n_u_deferred __pyx_string_tab[37]
#define __pyx_n_u_dict __pyx_string_tab[38]
#define __pyx_kp_u_disable __pyx_string_tab[39]
#define __pyx_n_u_e __pyx_string_tab[40]
#define __pyx_kp_u_enable __pyx_string_tab[41]
#define __pyx_n_u_enter __pyx_string_tab[42]
#define __pyx_n_u_error __pyx_string_tab[43]
#define __pyx_n_u_event __pyx_string_tab[44]
#define __pyx_n_u_exc_kind __pyx_string_tab[45]
#define __pyx_n_u_exit __pyx_string_tab[46]
#define __pyx_kp_u_expected __pyx_string_tab[47]
#define __pyx_n_u_fileno __pyx_string_tab[48]
#define __pyx_n_u_func __pyx_string_tab[49]
#define __pyx_kp_u_gc __pyx_string_tab[50]
#define __pyx_n_u_get_hub_noargs __pyx_string_tab[51]
#define __pyx_n_u_getcurrent __pyx_string_tab[52]
#define __pyx_n_u_gevent __pyx_string_tab[53]
#define __pyx_kp_u_gevent___hub_primitives __pyx_string_tab[54]
#define __pyx_n_u_gevent__gevent_c_hub_primitives __pyx_string_tab[55]
#define __pyx_n_u_gevent__hub_local __pyx_string_tab[56]
#define __pyx_n_u_gevent__util __pyx_string_tab[57]
#define __pyx_n_u_gevent_exceptions __pyx_string_tab[58]
#define __pyx_n_u_gevent_timeout __pyx_string_tab[59]
#define __pyx_kp_u_got __pyx_string_tab[60]
#define __pyx_n_u_greenlet __pyx_string_tab[61]
#define __pyx_n_u_greenlet_imported __pyx_string_tab[62]
#define __pyx_n_u_greenlet_init __pyx_string_tab[63]
#define __pyx_n_u_greenlet_primitives __pyx_string_tab[64]
#define __pyx_n_u_hub __pyx_string_tab[65]
#define __pyx_n_u_import __pyx_string_tab[66]
#define __pyx_n_u_import_c_accel __pyx_string_tab[67]
#define __pyx_n_u_init __pyx_string_tab[68]
#define __pyx_n_u_initializing __pyx_string_tab[69]
#define __pyx_n_u_io __pyx_string_tab[70]
#define __pyx_n_u_is_coroutine __pyx_string_tab[71]
#define __pyx_kp_u_isenabled __pyx_string_tab[72]
#define __pyx_n_u_iwait_on_objects __pyx_string_tab[73]
#define __pyx_n_u_join __pyx_string_tab[74]
#define __pyx_n_u_lambda __pyx_string_tab[75]
#define __pyx_n_u_main __pyx_string_tab[76]
#define __pyx_n_u_name __pyx_string_tab[77]
#define __pyx_n_u_next __pyx_string_tab[78]
#define __pyx_n_u_next_2 __pyx_string_tab[79]
#define __pyx_n_u_objects __pyx_string_tab[80]
#define __pyx_n_u_print_exc __pyx_string_tab[81]
#define __pyx_n_u_priority __pyx_string_tab[82]
#define __pyx_n_u_pyx_capi __pyx_string_tab[83]
#define __pyx_n_u_pyx_vtable __pyx_string_tab[84]
#define __pyx_n_u_rawlink __pyx_string_tab[85]
#define __pyx_n_u_run_callback __pyx_string_tab[86]
#define __pyx_n_u_self __pyx_string_tab[87]
#define __pyx_n_u_self_2 __pyx_string_tab[88]
#define __pyx_n_u_set_default_timeout_error __pyx_string_tab[89]
#define __pyx_n_u_set_name __pyx_string_tab[90]
#define __pyx_n_u_socket __pyx_string_tab[91]
#define __pyx_n_u_spec __pyx_string_tab[92]
#define __pyx_kp_u_src_gevent__hub_primitives_py __pyx_string_tab[93]
#define __pyx_n_u_start __pyx_string_tab[94]
#define __pyx_n_u_start_new_or_dummy __pyx_string_tab[95]
#define __pyx_n_u_stop __pyx_string_tab[96]
#define __pyx_n_u_switch __pyx_string_tab[97]
#define __pyx_n_u_tb __pyx_string_tab[98]
#define __pyx_n_u_test __pyx_string_tab[99]
#define __pyx_n_u_then __pyx_string_tab[100]
#define __pyx_n_u_then_args __pyx_string_tab[101]
#define __pyx_n_u_throw __pyx_string_tab[102]
#define __pyx_kp_u_timed_out __pyx_string_tab[103]
#define __pyx_n_u_timeout __pyx_string_tab[104]
#define __pyx_n_u_timeout_error __pyx_string_tab[105]
#define __pyx_n_u_timeout_exc __pyx_string_tab[106]
#define __pyx_n_u_timer __pyx_string_tab[107]
#define __pyx_n_u_traceback __pyx_string_tab[108]
#define __pyx_n_u_typ __pyx_string_tab[109]
#define __pyx_n_u_unlink __pyx_string_tab[110]
#define __pyx_n_u_value __pyx_string_tab[111]
#define __pyx_n_u_wait __pyx_string_tab[112]
#define __pyx_n_u_wait_on_objects __pyx_string_tab[113]
#define __pyx_n_u_wait_on_socket __pyx_string_tab[114]
#define __pyx_n_u_wait_on_watcher __pyx_string_tab[115]
#define __pyx_n_u_wait_read __pyx_string_tab[116]
#define __pyx_n_u_wait_readwrite __pyx_string_tab[117]
#define __pyx_n_u_wait_write __pyx_string_tab[118]
#define __pyx_n_u_waiter __pyx_string_tab[119]
#define __pyx_kp_u_waiting_on __pyx_string_tab[120]
#define __pyx_n_u_watcher __pyx_string_tab[121]
#define __pyx_n_u_watchers __pyx_string_tab[122]
#define __pyx_kp_u_with __pyx_string_tab[123]
/* #### Code section: module_state_clear ### */
#if CYTHON_USE_MODULE_STATE
static CYTHON_SMALL_CODE int __pyx_m_clear(PyObject *m) {
  __pyx_mstatetype *clear_module_state = __Pyx_PyModule_GetState(m);
  if (!clear_module_state) return 0;
  Py_CLEAR(clear_module_state->__pyx_d);
  Py_CLEAR(clear_module_state->__pyx_b);
  Py_CLEAR(clear_module_state->__pyx_cython_runtime);
  Py_CLEAR(clear_module_state->__pyx_empty_tuple);
  Py_CLEAR(clear_module_state->__pyx_empty_bytes);
  Py_CLEAR(clear_module_state->__pyx_empty_unicode);
  #ifdef __Pyx_CyFunction_USED
  Py_CLEAR(clear_module_state->__pyx_CyFunctionType);
  #endif
  #ifdef __Pyx_FusedFunction_USED
  Py_CLEAR(clear_module_state->__pyx_FusedFunctionType);
  #endif
  Py_CLEAR(clear_module_state->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_greenlet);
  Py_CLEAR(clear_module_state->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_TrackedRawGreenlet);
  Py_CLEAR(clear_module_state->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop);
  Py_CLEAR(clear_module_state->__pyx_ptype_6gevent_16_gevent_c_waiter_greenlet);
  Py_CLEAR(clear_module_state->__pyx_ptype_6gevent_16_gevent_c_waiter_Waiter);
  Py_CLEAR(clear_module_state->__pyx_ptype_6gevent_16_gevent_c_waiter_MultipleWaiter);
  Py_CLEAR(clear_module_state->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_greenlet);
  Py_CLEAR(clear_module_state->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet);
  Py_CLEAR(clear_module_state->__pyx_type_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet);
  Py_CLEAR(clear_module_state->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator);
  Py_CLEAR(clear_module_state->__pyx_type_6gevent_24_gevent_c_hub_primitives__WaitIterator);
  Py_CLEAR(clear_module_state->__pyx_k__2);
  Py_CLEAR(clear_module_state->__pyx_k__3);
  Py_CLEAR(clear_module_state->__pyx_k__4);
  Py_CLEAR(clear_module_state->__pyx_k__5);
  Py_CLEAR(clear_module_state->__pyx_k__6);
  Py_CLEAR(clear_module_state->__pyx_k__7);
  for (int i=0; i<5; ++i) { Py_CLEAR(clear_module_state->__pyx_tuple[i]); }
  for (int i=0; i<17; ++i) { Py_CLEAR(clear_module_state->__pyx_codeobj_tab[i]); }
  for (int i=0; i<124; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); }
  Py_CLEAR(clear_module_state->__pyx_int_1);
  Py_CLEAR(clear_module_state->__pyx_int_2);
  Py_CLEAR(clear_module_state->__pyx_int_3);
  Py_CLEAR(clear_module_state->__pyx_int_neg_1);
  return 0;
}
#endif
/* #### Code section: module_state_traverse ### */
#if CYTHON_USE_MODULE_STATE
static CYTHON_SMALL_CODE int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
  __pyx_mstatetype *traverse_module_state = __Pyx_PyModule_GetState(m);
  if (!traverse_module_state) return 0;
  Py_VISIT(traverse_module_state->__pyx_d);
  Py_VISIT(traverse_module_state->__pyx_b);
  Py_VISIT(traverse_module_state->__pyx_cython_runtime);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_tuple);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_bytes);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_unicode);
  #ifdef __Pyx_CyFunction_USED
  Py_VISIT(traverse_module_state->__pyx_CyFunctionType);
  #endif
  #ifdef __Pyx_FusedFunction_USED
  Py_VISIT(traverse_module_state->__pyx_FusedFunctionType);
  #endif
  Py_VISIT(traverse_module_state->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_greenlet);
  Py_VISIT(traverse_module_state->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_TrackedRawGreenlet);
  Py_VISIT(traverse_module_state->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop);
  Py_VISIT(traverse_module_state->__pyx_ptype_6gevent_16_gevent_c_waiter_greenlet);
  Py_VISIT(traverse_module_state->__pyx_ptype_6gevent_16_gevent_c_waiter_Waiter);
  Py_VISIT(traverse_module_state->__pyx_ptype_6gevent_16_gevent_c_waiter_MultipleWaiter);
  Py_VISIT(traverse_module_state->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_greenlet);
  Py_VISIT(traverse_module_state->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet);
  Py_VISIT(traverse_module_state->__pyx_type_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet);
  Py_VISIT(traverse_module_state->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator);
  Py_VISIT(traverse_module_state->__pyx_type_6gevent_24_gevent_c_hub_primitives__WaitIterator);
  Py_VISIT(traverse_module_state->__pyx_k__2);
  Py_VISIT(traverse_module_state->__pyx_k__3);
  Py_VISIT(traverse_module_state->__pyx_k__4);
  Py_VISIT(traverse_module_state->__pyx_k__5);
  Py_VISIT(traverse_module_state->__pyx_k__6);
  Py_VISIT(traverse_module_state->__pyx_k__7);
  for (int i=0; i<5; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_tuple[i]); }
  for (int i=0; i<17; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_codeobj_tab[i]); }
  for (int i=0; i<124; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); }
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_int_1);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_int_2);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_int_3);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_int_neg_1);
  return 0;
}
#endif
/* #### Code section: module_code ### */

/* "src/gevent/_hub_primitives.py":30
 * # error.
 * locals()['getcurrent'] = __import__('greenlet').getcurrent
 * locals()['greenlet_init'] = lambda: None             # <<<<<<<<<<<<<<
 * locals()['Waiter'] = _waiter.Waiter
 * locals()['MultipleWaiter'] = _waiter.MultipleWaiter
*/

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_18lambda(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_18lambda = {"lambda", (PyCFunction)__pyx_pw_6gevent_24_gevent_c_hub_primitives_18lambda, METH_NOARGS, 0};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_18lambda(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_lambda_funcdef_6gevent_24_gevent_c_hub_primitives_lambda(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_lambda_funcdef_6gevent_24_gevent_c_hub_primitives_lambda(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gevent/_gevent_c_greenlet_primitives.pxd":22
 *     void PyGreenlet_Import()
 * 
 * @cython.final             # <<<<<<<<<<<<<<
 * cdef inline greenlet getcurrent():
 *     return PyGreenlet_GetCurrent()
*/

static CYTHON_INLINE PyGreenlet *__pyx_f_6gevent_29_gevent_c_greenlet_primitives_getcurrent(void) {
  PyGreenlet *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getcurrent", 0);

  /* "gevent/_gevent_c_greenlet_primitives.pxd":24
 * @cython.final
 * cdef inline greenlet getcurrent():
 *     return PyGreenlet_GetCurrent()             # <<<<<<<<<<<<<<
 * 
 * cdef bint _greenlet_imported
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)PyGreenlet_GetCurrent()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyGreenlet *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gevent/_gevent_c_greenlet_primitives.pxd":22
 *     void PyGreenlet_Import()
 * 
 * @cython.final             # <<<<<<<<<<<<<<
 * cdef inline greenlet getcurrent():
 *     return PyGreenlet_GetCurrent()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_greenlet_primitives.getcurrent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gevent/_gevent_c_greenlet_primitives.pxd":28
 * cdef bint _greenlet_imported
 * 
 * cdef inline void greenlet_init():             # <<<<<<<<<<<<<<
 *     global _greenlet_imported
 *     if not _greenlet_imported:
*/

static CYTHON_INLINE void __pyx_f_6gevent_29_gevent_c_greenlet_primitives_greenlet_init(void) {
  int __pyx_t_1;

  /* "gevent/_gevent_c_greenlet_primitives.pxd":30
 * cdef inline void greenlet_init():
 *     global _greenlet_imported
 *     if not _greenlet_imported:             # <<<<<<<<<<<<<<
 *         PyGreenlet_Import()
 *         _greenlet_imported = True
*/
  __pyx_t_1 = (!__pyx_v_6gevent_29_gevent_c_greenlet_primitives__greenlet_imported);
  if (__pyx_t_1) {

    /* "gevent/_gevent_c_greenlet_primitives.pxd":31
 *     global _greenlet_imported
 *     if not _greenlet_imported:
 *         PyGreenlet_Import()             # <<<<<<<<<<<<<<
 *         _greenlet_imported = True
 * 
*/
    PyGreenlet_Import();

    /* "gevent/_gevent_c_greenlet_primitives.pxd":32
 *     if not _greenlet_imported:
 *         PyGreenlet_Import()
 *         _greenlet_imported = True             # <<<<<<<<<<<<<<
 * 
 * cdef inline object _greenlet_switch(greenlet self):
*/
    __pyx_v_6gevent_29_gevent_c_greenlet_primitives__greenlet_imported = 1;

    /* "gevent/_gevent_c_greenlet_primitives.pxd":30
 * cdef inline void greenlet_init():
 *     global _greenlet_imported
 *     if not _greenlet_imported:             # <<<<<<<<<<<<<<
 *         PyGreenlet_Import()
 *         _greenlet_imported = True
*/
  }

  /* "gevent/_gevent_c_greenlet_primitives.pxd":28
 * cdef bint _greenlet_imported
 * 
 * cdef inline void greenlet_init():             # <<<<<<<<<<<<<<
 *     global _greenlet_imported
 *     if not _greenlet_imported:
*/

  /* function exit code */
}

/* "gevent/_gevent_c_greenlet_primitives.pxd":34
 *         _greenlet_imported = True
 * 
 * cdef inline object _greenlet_switch(greenlet self):             # <<<<<<<<<<<<<<
 *     return PyGreenlet_Switch(self, NULL, NULL)
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_6gevent_29_gevent_c_greenlet_primitives__greenlet_switch(PyGreenlet *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_greenlet_switch", 0);

  /* "gevent/_gevent_c_greenlet_primitives.pxd":35
 * 
 * cdef inline object _greenlet_switch(greenlet self):
 *     return PyGreenlet_Switch(self, NULL, NULL)             # <<<<<<<<<<<<<<
 * 
 * cdef class TrackedRawGreenlet(greenlet):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyGreenlet_Switch(__pyx_v_self, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gevent/_gevent_c_greenlet_primitives.pxd":34
 *         _greenlet_imported = True
 * 
 * cdef inline object _greenlet_switch(greenlet self):             # <<<<<<<<<<<<<<
 *     return PyGreenlet_Switch(self, NULL, NULL)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_greenlet_primitives._greenlet_switch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gevent/_gevent_c_waiter.pxd":24
 *     void PyGreenlet_Import()
 * 
 * cdef inline greenlet getcurrent():             # <<<<<<<<<<<<<<
 *     return PyGreenlet_GetCurrent()
 * 
*/

static CYTHON_INLINE PyGreenlet *__pyx_f_6gevent_16_gevent_c_waiter_getcurrent(void) {
  PyGreenlet *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getcurrent", 0);

  /* "gevent/_gevent_c_waiter.pxd":25
 * 
 * cdef inline greenlet getcurrent():
 *     return PyGreenlet_GetCurrent()             # <<<<<<<<<<<<<<
 * 
 * cdef inline void greenlet_init():
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)PyGreenlet_GetCurrent()); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyGreenlet *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gevent/_gevent_c_waiter.pxd":24
 *     void PyGreenlet_Import()
 * 
 * cdef inline greenlet getcurrent():             # <<<<<<<<<<<<<<
 *     return PyGreenlet_GetCurrent()
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_waiter.getcurrent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gevent/_gevent_c_waiter.pxd":27
 *     return PyGreenlet_GetCurrent()
 * 
 * cdef inline void greenlet_init():             # <<<<<<<<<<<<<<
 *     global _greenlet_imported
 *     if not _greenlet_imported:
*/

static CYTHON_INLINE void __pyx_f_6gevent_16_gevent_c_waiter_greenlet_init(void) {
  int __pyx_t_1;

  /* "gevent/_gevent_c_waiter.pxd":29
 * cdef inline void greenlet_init():
 *     global _greenlet_imported
 *     if not _greenlet_imported:             # <<<<<<<<<<<<<<
 *         PyGreenlet_Import()
 *         _greenlet_imported = True
*/
  __pyx_t_1 = (!__pyx_v_6gevent_16_gevent_c_waiter__greenlet_imported);
  if (__pyx_t_1) {

    /* "gevent/_gevent_c_waiter.pxd":30
 *     global _greenlet_imported
 *     if not _greenlet_imported:
 *         PyGreenlet_Import()             # <<<<<<<<<<<<<<
 *         _greenlet_imported = True
 * 
*/
    PyGreenlet_Import();

    /* "gevent/_gevent_c_waiter.pxd":31
 *     if not _greenlet_imported:
 *         PyGreenlet_Import()
 *         _greenlet_imported = True             # <<<<<<<<<<<<<<
 * 
 * cdef class Waiter:
*/
    __pyx_v_6gevent_16_gevent_c_waiter__greenlet_imported = 1;

    /* "gevent/_gevent_c_waiter.pxd":29
 * cdef inline void greenlet_init():
 *     global _greenlet_imported
 *     if not _greenlet_imported:             # <<<<<<<<<<<<<<
 *         PyGreenlet_Import()
 *         _greenlet_imported = True
*/
  }

  /* "gevent/_gevent_c_waiter.pxd":27
 *     return PyGreenlet_GetCurrent()
 * 
 * cdef inline void greenlet_init():             # <<<<<<<<<<<<<<
 *     global _greenlet_imported
 *     if not _greenlet_imported:
*/

  /* function exit code */
}

/* "gevent/_gevent_c_hub_primitives.pxd":28
 *     void PyGreenlet_Import()
 * 
 * @cython.final             # <<<<<<<<<<<<<<
 * cdef inline greenlet getcurrent():
 *     return PyGreenlet_GetCurrent()
*/

static CYTHON_INLINE PyGreenlet *__pyx_f_6gevent_24_gevent_c_hub_primitives_getcurrent(void) {
  PyGreenlet *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getcurrent", 0);

  /* "gevent/_gevent_c_hub_primitives.pxd":30
 * @cython.final
 * cdef inline greenlet getcurrent():
 *     return PyGreenlet_GetCurrent()             # <<<<<<<<<<<<<<
 * 
 * cdef bint _greenlet_imported
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)PyGreenlet_GetCurrent()); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyGreenlet *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gevent/_gevent_c_hub_primitives.pxd":28
 *     void PyGreenlet_Import()
 * 
 * @cython.final             # <<<<<<<<<<<<<<
 * cdef inline greenlet getcurrent():
 *     return PyGreenlet_GetCurrent()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.getcurrent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gevent/_gevent_c_hub_primitives.pxd":34
 * cdef bint _greenlet_imported
 * 
 * cdef inline void greenlet_init():             # <<<<<<<<<<<<<<
 *     global _greenlet_imported
 *     if not _greenlet_imported:
*/

static CYTHON_INLINE void __pyx_f_6gevent_24_gevent_c_hub_primitives_greenlet_init(void) {
  int __pyx_t_1;

  /* "gevent/_gevent_c_hub_primitives.pxd":36
 * cdef inline void greenlet_init():
 *     global _greenlet_imported
 *     if not _greenlet_imported:             # <<<<<<<<<<<<<<
 *         PyGreenlet_Import()
 *         _greenlet_imported = True
*/
  __pyx_t_1 = (!__pyx_v_6gevent_24_gevent_c_hub_primitives__greenlet_imported);
  if (__pyx_t_1) {

    /* "gevent/_gevent_c_hub_primitives.pxd":37
 *     global _greenlet_imported
 *     if not _greenlet_imported:
 *         PyGreenlet_Import()             # <<<<<<<<<<<<<<
 *         _greenlet_imported = True
 * 
*/
    PyGreenlet_Import();

    /* "gevent/_gevent_c_hub_primitives.pxd":38
 *     if not _greenlet_imported:
 *         PyGreenlet_Import()
 *         _greenlet_imported = True             # <<<<<<<<<<<<<<
 * 
 * 
*/
    __pyx_v_6gevent_24_gevent_c_hub_primitives__greenlet_imported = 1;

    /* "gevent/_gevent_c_hub_primitives.pxd":36
 * cdef inline void greenlet_init():
 *     global _greenlet_imported
 *     if not _greenlet_imported:             # <<<<<<<<<<<<<<
 *         PyGreenlet_Import()
 *         _greenlet_imported = True
*/
  }

  /* "gevent/_gevent_c_hub_primitives.pxd":34
 * cdef bint _greenlet_imported
 * 
 * cdef inline void greenlet_init():             # <<<<<<<<<<<<<<
 *     global _greenlet_imported
 *     if not _greenlet_imported:
*/

  /* function exit code */
}

/* "src/gevent/_hub_primitives.py":46
 * class WaitOperationsGreenlet(SwitchOutGreenletWithLoop): # pylint:disable=undefined-variable
 * 
 *     def wait(self, watcher):             # <<<<<<<<<<<<<<
 *         """
 *         Wait until the *watcher* (which must not be started) is ready.
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_1wait(PyObject *__pyx_v_self, PyObject *__pyx_v_watcher); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_wait(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher, int __pyx_skip_dispatch) {
  struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter *__pyx_v_waiter = NULL;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  unsigned int __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9[11];
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  char const *__pyx_t_13;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  PyObject *__pyx_t_19 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_wait); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_1wait)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          assert(__pyx_t_4);
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_5 = 1;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_watcher};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "src/gevent/_hub_primitives.py":52
 *         The current greenlet will be unscheduled during this time.
 *         """
 *         waiter = Waiter(self) # pylint:disable=undefined-variable             # <<<<<<<<<<<<<<
 *         watcher.start(waiter.switch, waiter)
 *         try:
*/
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_mstate_global->__pyx_ptype_6gevent_16_gevent_c_waiter_Waiter), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_waiter = ((struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":53
 *         """
 *         waiter = Waiter(self) # pylint:disable=undefined-variable
 *         watcher.start(waiter.switch, waiter)             # <<<<<<<<<<<<<<
 *         try:
 *             result = waiter.get()
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_waiter), __pyx_mstate_global->__pyx_n_u_switch); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_4);
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_2, function);
    __pyx_t_5 = 1;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, ((PyObject *)__pyx_v_waiter)};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":54
 *         waiter = Waiter(self) # pylint:disable=undefined-variable
 *         watcher.start(waiter.switch, waiter)
 *         try:             # <<<<<<<<<<<<<<
 *             result = waiter.get()
 *             if result is not waiter:
*/
  /*try:*/ {

    /* "src/gevent/_hub_primitives.py":55
 *         watcher.start(waiter.switch, waiter)
 *         try:
 *             result = waiter.get()             # <<<<<<<<<<<<<<
 *             if result is not waiter:
 *                 raise InvalidSwitchError(
*/
    __pyx_t_1 = ((struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_Waiter *)__pyx_v_waiter->__pyx_vtab)->get(__pyx_v_waiter, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_result = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "src/gevent/_hub_primitives.py":56
 *         try:
 *             result = waiter.get()
 *             if result is not waiter:             # <<<<<<<<<<<<<<
 *                 raise InvalidSwitchError(
 *                     'Invalid switch into %s: got %r (expected %r; waiting on %r with %r)' % (
*/
    __pyx_t_6 = (__pyx_v_result != ((PyObject *)__pyx_v_waiter));
    if (unlikely(__pyx_t_6)) {

      /* "src/gevent/_hub_primitives.py":59
 *                 raise InvalidSwitchError(
 *                     'Invalid switch into %s: got %r (expected %r; waiting on %r with %r)' % (
 *                         getcurrent(), # pylint:disable=undefined-variable             # <<<<<<<<<<<<<<
 *                         result,
 *                         waiter,
*/
      __pyx_t_2 = ((PyObject *)__pyx_f_6gevent_24_gevent_c_hub_primitives_getcurrent()); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 59, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_t_2), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "src/gevent/_hub_primitives.py":60
 *                     'Invalid switch into %s: got %r (expected %r; waiting on %r with %r)' % (
 *                         getcurrent(), # pylint:disable=undefined-variable
 *                         result,             # <<<<<<<<<<<<<<
 *                         waiter,
 *                         self,
*/
      __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_result), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);

      /* "src/gevent/_hub_primitives.py":61
 *                         getcurrent(), # pylint:disable=undefined-variable
 *                         result,
 *                         waiter,             # <<<<<<<<<<<<<<
 *                         self,
 *                         watcher
*/
      __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(((PyObject *)__pyx_v_waiter)), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 61, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);

      /* "src/gevent/_hub_primitives.py":62
 *                         result,
 *                         waiter,
 *                         self,             # <<<<<<<<<<<<<<
 *                         watcher
 *                     )
*/
      __pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(((PyObject *)__pyx_v_self)), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 62, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_7);

      /* "src/gevent/_hub_primitives.py":63
 *                         waiter,
 *                         self,
 *                         watcher             # <<<<<<<<<<<<<<
 *                     )
 *                 )
*/
      __pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_watcher), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 63, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_switch_into;
      __pyx_t_9[1] = __pyx_t_3;
      __pyx_t_9[2] = __pyx_mstate_global->__pyx_kp_u_got;
      __pyx_t_9[3] = __pyx_t_2;
      __pyx_t_9[4] = __pyx_mstate_global->__pyx_kp_u_expected;
      __pyx_t_9[5] = __pyx_t_4;
      __pyx_t_9[6] = __pyx_mstate_global->__pyx_kp_u_waiting_on;
      __pyx_t_9[7] = __pyx_t_7;
      __pyx_t_9[8] = __pyx_mstate_global->__pyx_kp_u_with;
      __pyx_t_9[9] = __pyx_t_8;
      __pyx_t_9[10] = __pyx_mstate_global->__pyx_kp_u_;

      /* "src/gevent/_hub_primitives.py":58
 *             if result is not waiter:
 *                 raise InvalidSwitchError(
 *                     'Invalid switch into %s: got %r (expected %r; waiting on %r with %r)' % (             # <<<<<<<<<<<<<<
 *                         getcurrent(), # pylint:disable=undefined-variable
 *                         result,
*/
      __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_9, 11, 20 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 6 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 13 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8));
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 58, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_INCREF(__pyx_v_6gevent_24_gevent_c_hub_primitives_InvalidSwitchError);
      __pyx_t_8 = __pyx_v_6gevent_24_gevent_c_hub_primitives_InvalidSwitchError; __pyx_t_7 = NULL;
      __pyx_t_5 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_7);
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_5 = 1;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_10};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(0, 57, __pyx_L4_error)

      /* "src/gevent/_hub_primitives.py":56
 *         try:
 *             result = waiter.get()
 *             if result is not waiter:             # <<<<<<<<<<<<<<
 *                 raise InvalidSwitchError(
 *                     'Invalid switch into %s: got %r (expected %r; waiting on %r with %r)' % (
*/
    }
  }

  /* "src/gevent/_hub_primitives.py":67
 *                 )
 *         finally:
 *             watcher.stop()             # <<<<<<<<<<<<<<
 * 
 *     def cancel_waits_close_and_then(self, watchers, exc_kind, then, *then_args):
*/
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_stop); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 67, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_18);
      __Pyx_XGOTREF(__pyx_t_19);
      __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
      {
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_stop); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 67, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      }
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
      goto __pyx_L1_error;
      __pyx_L8_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      }
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "src/gevent/_hub_primitives.py":46
 * class WaitOperationsGreenlet(SwitchOutGreenletWithLoop): # pylint:disable=undefined-variable
 * 
 *     def wait(self, watcher):             # <<<<<<<<<<<<<<
 *         """
 *         Wait until the *watcher* (which must not be started) is ready.
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_waiter);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_1wait(PyObject *__pyx_v_self, PyObject *__pyx_v_watcher); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_wait, "WaitOperationsGreenlet.wait(self, watcher)\nWait until the *watcher* (which must not be started) is ready.\n\nThe current greenlet will be unscheduled during this time.");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_1wait = {"wait", (PyCFunction)__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_1wait, METH_O, __pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_wait};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_1wait(PyObject *__pyx_v_self, PyObject *__pyx_v_watcher) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wait (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_wait(((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_self), ((PyObject *)__pyx_v_watcher));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_wait(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_wait(__pyx_v_self, __pyx_v_watcher, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":69
 *             watcher.stop()
 * 
 *     def cancel_waits_close_and_then(self, watchers, exc_kind, then, *then_args):             # <<<<<<<<<<<<<<
 *         deferred = []
 *         for watcher in watchers:
*/

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_3cancel_waits_close_and_then(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_2cancel_waits_close_and_then, "WaitOperationsGreenlet.cancel_waits_close_and_then(self, watchers, exc_kind, then, *then_args)");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_3cancel_waits_close_and_then = {"cancel_waits_close_and_then", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_3cancel_waits_close_and_then, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_2cancel_waits_close_and_then};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_3cancel_waits_close_and_then(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_watchers = 0;
  PyObject *__pyx_v_exc_kind = 0;
  PyObject *__pyx_v_then = 0;
  PyObject *__pyx_v_then_args = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cancel_waits_close_and_then (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  __pyx_v_then_args = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 3, __pyx_nargs);
  if (unlikely(!__pyx_v_then_args)) {
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __Pyx_GOTREF(__pyx_v_then_args);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_watchers,&__pyx_mstate_global->__pyx_n_u_exc_kind,&__pyx_mstate_global->__pyx_n_u_then,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        default:
        case  3:
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_watchers)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 69, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_exc_kind)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 69, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("cancel_waits_close_and_then", 0, 3, 3, 1); __PYX_ERR(0, 69, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_then)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 69, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("cancel_waits_close_and_then", 0, 3, 3, 2); __PYX_ERR(0, 69, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        const Py_ssize_t used_pos_args = (kwd_pos_args < 3) ? kwd_pos_args : 3;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, used_pos_args, "cancel_waits_close_and_then") < 0)) __PYX_ERR(0, 69, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs < 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_watchers = values[0];
    __pyx_v_exc_kind = values[1];
    __pyx_v_then = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cancel_waits_close_and_then", 0, 3, 3, __pyx_nargs); __PYX_ERR(0, 69, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_DECREF(__pyx_v_then_args); __pyx_v_then_args = 0;
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.cancel_waits_close_and_then", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_2cancel_waits_close_and_then(((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_self), __pyx_v_watchers, __pyx_v_exc_kind, __pyx_v_then, __pyx_v_then_args);

  /* function exit code */
  __Pyx_DECREF(__pyx_v_then_args);
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_2cancel_waits_close_and_then(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watchers, PyObject *__pyx_v_exc_kind, PyObject *__pyx_v_then, PyObject *__pyx_v_then_args) {
  PyObject *__pyx_v_deferred = NULL;
  PyObject *__pyx_v_watcher = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  unsigned int __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("cancel_waits_close_and_then", 0);

  /* "src/gevent/_hub_primitives.py":70
 * 
 *     def cancel_waits_close_and_then(self, watchers, exc_kind, then, *then_args):
 *         deferred = []             # <<<<<<<<<<<<<<
 *         for watcher in watchers:
 *             if watcher is None:
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_deferred = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":71
 *     def cancel_waits_close_and_then(self, watchers, exc_kind, then, *then_args):
 *         deferred = []
 *         for watcher in watchers:             # <<<<<<<<<<<<<<
 *             if watcher is None:
 *                 continue
*/
  if (likely(PyList_CheckExact(__pyx_v_watchers)) || PyTuple_CheckExact(__pyx_v_watchers)) {
    __pyx_t_1 = __pyx_v_watchers; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_watchers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 71, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 71, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_PyList_GetItemRef(__pyx_t_1, __pyx_t_2);
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 71, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_2++;
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 71, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 71, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2);
        if (unlikely((0 < 0))) __PYX_ERR(0, 71, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_2++;
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 71, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 71, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF_SET(__pyx_v_watcher, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "src/gevent/_hub_primitives.py":72
 *         deferred = []
 *         for watcher in watchers:
 *             if watcher is None:             # <<<<<<<<<<<<<<
 *                 continue
 *             if watcher.callback is None:
*/
    __pyx_t_5 = (__pyx_v_watcher == Py_None);
    if (__pyx_t_5) {

      /* "src/gevent/_hub_primitives.py":73
 *         for watcher in watchers:
 *             if watcher is None:
 *                 continue             # <<<<<<<<<<<<<<
 *             if watcher.callback is None:
 *                 watcher.close()
*/
      goto __pyx_L3_continue;

      /* "src/gevent/_hub_primitives.py":72
 *         deferred = []
 *         for watcher in watchers:
 *             if watcher is None:             # <<<<<<<<<<<<<<
 *                 continue
 *             if watcher.callback is None:
*/
    }

    /* "src/gevent/_hub_primitives.py":74
 *             if watcher is None:
 *                 continue
 *             if watcher.callback is None:             # <<<<<<<<<<<<<<
 *                 watcher.close()
 *             else:
*/
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_callback); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = (__pyx_t_4 == Py_None);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_5) {

      /* "src/gevent/_hub_primitives.py":75
 *                 continue
 *             if watcher.callback is None:
 *                 watcher.close()             # <<<<<<<<<<<<<<
 *             else:
 *                 deferred.append(watcher)
*/
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 75, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 75, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

      /* "src/gevent/_hub_primitives.py":74
 *             if watcher is None:
 *                 continue
 *             if watcher.callback is None:             # <<<<<<<<<<<<<<
 *                 watcher.close()
 *             else:
*/
      goto __pyx_L6;
    }

    /* "src/gevent/_hub_primitives.py":77
 *                 watcher.close()
 *             else:
 *                 deferred.append(watcher)             # <<<<<<<<<<<<<<
 *         if deferred:
 *             self.loop.run_callback(self._cancel_waits_then, deferred, exc_kind, then, then_args)
*/
    /*else*/ {
      __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_deferred, __pyx_v_watcher); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 77, __pyx_L1_error)
    }
    __pyx_L6:;

    /* "src/gevent/_hub_primitives.py":71
 *     def cancel_waits_close_and_then(self, watchers, exc_kind, then, *then_args):
 *         deferred = []
 *         for watcher in watchers:             # <<<<<<<<<<<<<<
 *             if watcher is None:
 *                 continue
*/
    __pyx_L3_continue:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":78
 *             else:
 *                 deferred.append(watcher)
 *         if deferred:             # <<<<<<<<<<<<<<
 *             self.loop.run_callback(self._cancel_waits_then, deferred, exc_kind, then, then_args)
 *         else:
*/
  __pyx_t_5 = (__Pyx_PyList_GET_SIZE(__pyx_v_deferred) != 0);
  if (unlikely(((!CYTHON_ASSUME_SAFE_MACROS) && __pyx_t_5 < 0))) __PYX_ERR(0, 78, __pyx_L1_error)
  if (__pyx_t_5) {

    /* "src/gevent/_hub_primitives.py":79
 *                 deferred.append(watcher)
 *         if deferred:
 *             self.loop.run_callback(self._cancel_waits_then, deferred, exc_kind, then, then_args)             # <<<<<<<<<<<<<<
 *         else:
 *             then(*then_args)
*/
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->__pyx_base.loop, __pyx_mstate_global->__pyx_n_u_run_callback); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 79, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_cancel_waits_then); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = NULL;
    __pyx_t_9 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_8);
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_9 = 1;
    }
    #endif
    {
      PyObject *__pyx_callargs[6] = {__pyx_t_8, __pyx_t_4, __pyx_v_deferred, __pyx_v_exc_kind, __pyx_v_then, __pyx_v_then_args};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 5+__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "src/gevent/_hub_primitives.py":78
 *             else:
 *                 deferred.append(watcher)
 *         if deferred:             # <<<<<<<<<<<<<<
 *             self.loop.run_callback(self._cancel_waits_then, deferred, exc_kind, then, then_args)
 *         else:
*/
    goto __pyx_L8;
  }

  /* "src/gevent/_hub_primitives.py":81
 *             self.loop.run_callback(self._cancel_waits_then, deferred, exc_kind, then, then_args)
 *         else:
 *             then(*then_args)             # <<<<<<<<<<<<<<
 * 
 *     def _cancel_waits_then(self, watchers, exc_kind, then, then_args):
*/
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_then, __pyx_v_then_args, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __pyx_L8:;

  /* "src/gevent/_hub_primitives.py":69
 *             watcher.stop()
 * 
 *     def cancel_waits_close_and_then(self, watchers, exc_kind, then, *then_args):             # <<<<<<<<<<<<<<
 *         deferred = []
 *         for watcher in watchers:
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.cancel_waits_close_and_then", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_deferred);
  __Pyx_XDECREF(__pyx_v_watcher);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":83
 *             then(*then_args)
 * 
 *     def _cancel_waits_then(self, watchers, exc_kind, then, then_args):             # <<<<<<<<<<<<<<
 *         for watcher in watchers:
 *             self._cancel_wait(watcher, exc_kind, True)
*/

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_5_cancel_waits_then(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_4_cancel_waits_then, "WaitOperationsGreenlet._cancel_waits_then(self, watchers, exc_kind, then, then_args)");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_5_cancel_waits_then = {"_cancel_waits_then", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_5_cancel_waits_then, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_4_cancel_waits_then};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_5_cancel_waits_then(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_watchers = 0;
  PyObject *__pyx_v_exc_kind = 0;
  PyObject *__pyx_v_then = 0;
  PyObject *__pyx_v_then_args = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_cancel_waits_then (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_watchers,&__pyx_mstate_global->__pyx_n_u_exc_kind,&__pyx_mstate_global->__pyx_n_u_then,&__pyx_mstate_global->__pyx_n_u_then_args,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_watchers)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 83, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_exc_kind)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 83, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_cancel_waits_then", 1, 4, 4, 1); __PYX_ERR(0, 83, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_then)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 83, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_cancel_waits_then", 1, 4, 4, 2); __PYX_ERR(0, 83, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_then_args)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[3]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 83, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_cancel_waits_then", 1, 4, 4, 3); __PYX_ERR(0, 83, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_cancel_waits_then") < 0)) __PYX_ERR(0, 83, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
      values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
    }
    __pyx_v_watchers = values[0];
    __pyx_v_exc_kind = values[1];
    __pyx_v_then = values[2];
    __pyx_v_then_args = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_cancel_waits_then", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 83, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet._cancel_waits_then", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_4_cancel_waits_then(((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_self), __pyx_v_watchers, __pyx_v_exc_kind, __pyx_v_then, __pyx_v_then_args);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_4_cancel_waits_then(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watchers, PyObject *__pyx_v_exc_kind, PyObject *__pyx_v_then, PyObject *__pyx_v_then_args) {
  PyObject *__pyx_v_watcher = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_cancel_waits_then", 0);

  /* "src/gevent/_hub_primitives.py":84
 * 
 *     def _cancel_waits_then(self, watchers, exc_kind, then, then_args):
 *         for watcher in watchers:             # <<<<<<<<<<<<<<
 *             self._cancel_wait(watcher, exc_kind, True)
 *         then(*then_args)
*/
  if (likely(PyList_CheckExact(__pyx_v_watchers)) || PyTuple_CheckExact(__pyx_v_watchers)) {
    __pyx_t_1 = __pyx_v_watchers; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_watchers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 84, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 84, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_PyList_GetItemRef(__pyx_t_1, __pyx_t_2);
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 84, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_2++;
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 84, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 84, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2);
        if (unlikely((0 < 0))) __PYX_ERR(0, 84, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_2++;
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 84, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 84, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF_SET(__pyx_v_watcher, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "src/gevent/_hub_primitives.py":85
 *     def _cancel_waits_then(self, watchers, exc_kind, then, then_args):
 *         for watcher in watchers:
 *             self._cancel_wait(watcher, exc_kind, True)             # <<<<<<<<<<<<<<
 *         then(*then_args)
 * 
*/
    __pyx_t_4 = ((struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_self->__pyx_base.__pyx_vtab)->_cancel_wait(__pyx_v_self, __pyx_v_watcher, __pyx_v_exc_kind, Py_True, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 85, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "src/gevent/_hub_primitives.py":84
 * 
 *     def _cancel_waits_then(self, watchers, exc_kind, then, then_args):
 *         for watcher in watchers:             # <<<<<<<<<<<<<<
 *             self._cancel_wait(watcher, exc_kind, True)
 *         then(*then_args)
*/
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":86
 *         for watcher in watchers:
 *             self._cancel_wait(watcher, exc_kind, True)
 *         then(*then_args)             # <<<<<<<<<<<<<<
 * 
 *     def cancel_wait(self, watcher, error, close_watcher=False):
*/
  __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_then_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_then, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/gevent/_hub_primitives.py":83
 *             then(*then_args)
 * 
 *     def _cancel_waits_then(self, watchers, exc_kind, then, then_args):             # <<<<<<<<<<<<<<
 *         for watcher in watchers:
 *             self._cancel_wait(watcher, exc_kind, True)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet._cancel_waits_then", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_watcher);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":88
 *         then(*then_args)
 * 
 *     def cancel_wait(self, watcher, error, close_watcher=False):             # <<<<<<<<<<<<<<
 *         """
 *         Cancel an in-progress call to :meth:`wait` by throwing the given *error*
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_7cancel_wait(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_cancel_wait(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher, PyObject *__pyx_v_error, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_cancel_wait *__pyx_optional_args) {
  PyObject *__pyx_v_close_watcher = ((PyObject *)Py_False);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  unsigned int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("cancel_wait", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_close_watcher = __pyx_optional_args->close_watcher;
    }
  }
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_cancel_wait); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_7cancel_wait)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          assert(__pyx_t_4);
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_5 = 1;
        }
        #endif
        {
          PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_watcher, __pyx_v_error, __pyx_v_close_watcher};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 88, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "src/gevent/_hub_primitives.py":101
 * 
 *         """
 *         if watcher is None:             # <<<<<<<<<<<<<<
 *             # Presumably already closed.
 *             # See https://github.com/gevent/gevent/issues/1089
*/
  __pyx_t_6 = (__pyx_v_watcher == Py_None);
  if (__pyx_t_6) {

    /* "src/gevent/_hub_primitives.py":104
 *             # Presumably already closed.
 *             # See https://github.com/gevent/gevent/issues/1089
 *             return             # <<<<<<<<<<<<<<
 * 
 *         if watcher.callback is not None:
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/gevent/_hub_primitives.py":101
 * 
 *         """
 *         if watcher is None:             # <<<<<<<<<<<<<<
 *             # Presumably already closed.
 *             # See https://github.com/gevent/gevent/issues/1089
*/
  }

  /* "src/gevent/_hub_primitives.py":106
 *             return
 * 
 *         if watcher.callback is not None:             # <<<<<<<<<<<<<<
 *             self.loop.run_callback(self._cancel_wait, watcher, error, close_watcher)
 *             return
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_callback); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = (__pyx_t_1 != Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {

    /* "src/gevent/_hub_primitives.py":107
 * 
 *         if watcher.callback is not None:
 *             self.loop.run_callback(self._cancel_wait, watcher, error, close_watcher)             # <<<<<<<<<<<<<<
 *             return
 * 
*/
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->__pyx_base.loop, __pyx_mstate_global->__pyx_n_u_run_callback); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_cancel_wait_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      assert(__pyx_t_4);
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
    #endif
    {
      PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_t_3, __pyx_v_watcher, __pyx_v_error, __pyx_v_close_watcher};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 107, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "src/gevent/_hub_primitives.py":108
 *         if watcher.callback is not None:
 *             self.loop.run_callback(self._cancel_wait, watcher, error, close_watcher)
 *             return             # <<<<<<<<<<<<<<
 * 
 *         if close_watcher:
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/gevent/_hub_primitives.py":106
 *             return
 * 
 *         if watcher.callback is not None:             # <<<<<<<<<<<<<<
 *             self.loop.run_callback(self._cancel_wait, watcher, error, close_watcher)
 *             return
*/
  }

  /* "src/gevent/_hub_primitives.py":110
 *             return
 * 
 *         if close_watcher:             # <<<<<<<<<<<<<<
 *             watcher.close()
 * 
*/
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_close_watcher); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 110, __pyx_L1_error)
  if (__pyx_t_6) {

    /* "src/gevent/_hub_primitives.py":111
 * 
 *         if close_watcher:
 *             watcher.close()             # <<<<<<<<<<<<<<
 * 
 *     def _cancel_wait(self, watcher, error, close_watcher):
*/
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "src/gevent/_hub_primitives.py":110
 *             return
 * 
 *         if close_watcher:             # <<<<<<<<<<<<<<
 *             watcher.close()
 * 
*/
  }

  /* "src/gevent/_hub_primitives.py":88
 *         then(*then_args)
 * 
 *     def cancel_wait(self, watcher, error, close_watcher=False):             # <<<<<<<<<<<<<<
 *         """
 *         Cancel an in-progress call to :meth:`wait` by throwing the given *error*
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.cancel_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_7cancel_wait(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_6cancel_wait, "WaitOperationsGreenlet.cancel_wait(self, watcher, error, close_watcher=False)\nCancel an in-progress call to :meth:`wait` by throwing the given *error*\nin the waiting greenlet.\n\n.. versionchanged:: 1.3a1\n   Added the *close_watcher* parameter. If true, the watcher\n   will be closed after the exception is thrown. The watcher should then\n   be discarded. Closing the watcher is important to release native resources.\n.. versionchanged:: 1.3a2\n   Allow the *watcher* to be ``None``. No action is taken in that case.");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_7cancel_wait = {"cancel_wait", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_7cancel_wait, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_6cancel_wait};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_7cancel_wait(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_watcher = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_v_close_watcher = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cancel_wait (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_watcher,&__pyx_mstate_global->__pyx_n_u_error,&__pyx_mstate_global->__pyx_n_u_close_watcher,0};
    values[2] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_False));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_watcher)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 88, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_error)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 88, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("cancel_wait", 0, 2, 3, 1); __PYX_ERR(0, 88, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_close_watcher);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[2]);
            values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 88, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "cancel_wait") < 0)) __PYX_ERR(0, 88, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_watcher = values[0];
    __pyx_v_error = values[1];
    __pyx_v_close_watcher = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cancel_wait", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 88, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.cancel_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_6cancel_wait(((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_self), __pyx_v_watcher, __pyx_v_error, __pyx_v_close_watcher);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_6cancel_wait(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher, PyObject *__pyx_v_error, PyObject *__pyx_v_close_watcher) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_cancel_wait __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("cancel_wait", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.close_watcher = __pyx_v_close_watcher;
  __pyx_t_1 = __pyx_vtabptr_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet->cancel_wait(__pyx_v_self, __pyx_v_watcher, __pyx_v_error, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.cancel_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":113
 *             watcher.close()
 * 
 *     def _cancel_wait(self, watcher, error, close_watcher):             # <<<<<<<<<<<<<<
 *         # Running in the hub. Switches to the waiting greenlet to raise
 *         # the error; assuming the waiting greenlet dies, switches back
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_9_cancel_wait(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet__cancel_wait(CYTHON_UNUSED struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher, PyObject *__pyx_v_error, PyObject *__pyx_v_close_watcher, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_active = NULL;
  PyObject *__pyx_v_cb = NULL;
  PyObject *__pyx_v_glet = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  unsigned int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_cancel_wait", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_cancel_wait_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_9_cancel_wait)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          assert(__pyx_t_4);
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_5 = 1;
        }
        #endif
        {
          PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_watcher, __pyx_v_error, __pyx_v_close_watcher};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "src/gevent/_hub_primitives.py":120
 *         # We have to check again to see if it was still active by the time
 *         # our callback actually runs.
 *         active = watcher.active             # <<<<<<<<<<<<<<
 *         cb = watcher.callback
 *         if close_watcher:
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_active); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_active = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":121
 *         # our callback actually runs.
 *         active = watcher.active
 *         cb = watcher.callback             # <<<<<<<<<<<<<<
 *         if close_watcher:
 *             watcher.close()
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_callback); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_cb = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":122
 *         active = watcher.active
 *         cb = watcher.callback
 *         if close_watcher:             # <<<<<<<<<<<<<<
 *             watcher.close()
 *         if active:
*/
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_close_watcher); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 122, __pyx_L1_error)
  if (__pyx_t_6) {

    /* "src/gevent/_hub_primitives.py":123
 *         cb = watcher.callback
 *         if close_watcher:
 *             watcher.close()             # <<<<<<<<<<<<<<
 *         if active:
 *             # The callback should be greenlet.switch(). It may or may not be None.
*/
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "src/gevent/_hub_primitives.py":122
 *         active = watcher.active
 *         cb = watcher.callback
 *         if close_watcher:             # <<<<<<<<<<<<<<
 *             watcher.close()
 *         if active:
*/
  }

  /* "src/gevent/_hub_primitives.py":124
 *         if close_watcher:
 *             watcher.close()
 *         if active:             # <<<<<<<<<<<<<<
 *             # The callback should be greenlet.switch(). It may or may not be None.
 *             glet = getattr(cb, '__self__', None)
*/
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_active); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 124, __pyx_L1_error)
  if (__pyx_t_6) {

    /* "src/gevent/_hub_primitives.py":126
 *         if active:
 *             # The callback should be greenlet.switch(). It may or may not be None.
 *             glet = getattr(cb, '__self__', None)             # <<<<<<<<<<<<<<
 *             if glet is not None:
 *                 glet.throw(error)
*/
    __pyx_t_2 = __Pyx_GetAttr3(__pyx_v_cb, __pyx_mstate_global->__pyx_n_u_self, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 126, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_glet = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "src/gevent/_hub_primitives.py":127
 *             # The callback should be greenlet.switch(). It may or may not be None.
 *             glet = getattr(cb, '__self__', None)
 *             if glet is not None:             # <<<<<<<<<<<<<<
 *                 glet.throw(error)
 * 
*/
    __pyx_t_6 = (__pyx_v_glet != Py_None);
    if (__pyx_t_6) {

      /* "src/gevent/_hub_primitives.py":128
 *             glet = getattr(cb, '__self__', None)
 *             if glet is not None:
 *                 glet.throw(error)             # <<<<<<<<<<<<<<
 * 
 * 
*/
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_glet, __pyx_mstate_global->__pyx_n_u_throw); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 128, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = NULL;
      __pyx_t_5 = 0;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
        assert(__pyx_t_3);
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_5 = 1;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_error};
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 128, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "src/gevent/_hub_primitives.py":127
 *             # The callback should be greenlet.switch(). It may or may not be None.
 *             glet = getattr(cb, '__self__', None)
 *             if glet is not None:             # <<<<<<<<<<<<<<
 *                 glet.throw(error)
 * 
*/
    }

    /* "src/gevent/_hub_primitives.py":124
 *         if close_watcher:
 *             watcher.close()
 *         if active:             # <<<<<<<<<<<<<<
 *             # The callback should be greenlet.switch(). It may or may not be None.
 *             glet = getattr(cb, '__self__', None)
*/
  }

  /* "src/gevent/_hub_primitives.py":113
 *             watcher.close()
 * 
 *     def _cancel_wait(self, watcher, error, close_watcher):             # <<<<<<<<<<<<<<
 *         # Running in the hub. Switches to the waiting greenlet to raise
 *         # the error; assuming the waiting greenlet dies, switches back
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet._cancel_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_active);
  __Pyx_XDECREF(__pyx_v_cb);
  __Pyx_XDECREF(__pyx_v_glet);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_9_cancel_wait(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_8_cancel_wait, "WaitOperationsGreenlet._cancel_wait(self, watcher, error, close_watcher)");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_9_cancel_wait = {"_cancel_wait", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_9_cancel_wait, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_8_cancel_wait};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_9_cancel_wait(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_watcher = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_v_close_watcher = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_cancel_wait (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_watcher,&__pyx_mstate_global->__pyx_n_u_error,&__pyx_mstate_global->__pyx_n_u_close_watcher,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_watcher)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_error)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_cancel_wait", 1, 3, 3, 1); __PYX_ERR(0, 113, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_close_watcher)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_cancel_wait", 1, 3, 3, 2); __PYX_ERR(0, 113, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_cancel_wait") < 0)) __PYX_ERR(0, 113, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_watcher = values[0];
    __pyx_v_error = values[1];
    __pyx_v_close_watcher = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_cancel_wait", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 113, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet._cancel_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_8_cancel_wait(((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_self), __pyx_v_watcher, __pyx_v_error, __pyx_v_close_watcher);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_8_cancel_wait(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_self, PyObject *__pyx_v_watcher, PyObject *__pyx_v_error, PyObject *__pyx_v_close_watcher) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_cancel_wait", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet__cancel_wait(__pyx_v_self, __pyx_v_watcher, __pyx_v_error, __pyx_v_close_watcher, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.WaitOperationsGreenlet._cancel_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":133
 * class _WaitIterator(object):
 * 
 *     def __init__(self, objects, hub, timeout, count):             # <<<<<<<<<<<<<<
 *         self._hub = hub
 *         self._waiter = MultipleWaiter(hub) # pylint:disable=undefined-variable
*/

/* Python wrapper */
static int __pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_objects = 0;
  PyObject *__pyx_v_hub = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_count = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_objects,&__pyx_mstate_global->__pyx_n_u_hub,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_count,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_objects)) != 0)) {
          (void)__Pyx_Arg_NewRef_VARARGS(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 133, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_hub)) != 0)) {
          (void)__Pyx_Arg_NewRef_VARARGS(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 133, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 133, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout)) != 0)) {
          (void)__Pyx_Arg_NewRef_VARARGS(values[2]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 133, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 133, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_count)) != 0)) {
          (void)__Pyx_Arg_NewRef_VARARGS(values[3]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 133, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 133, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 133, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
      values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
      values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
      values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);
    }
    __pyx_v_objects = values[0];
    __pyx_v_hub = values[1];
    __pyx_v_timeout = values[2];
    __pyx_v_count = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 133, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___init__(((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *)__pyx_v_self), __pyx_v_objects, __pyx_v_hub, __pyx_v_timeout, __pyx_v_count);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___init__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self, PyObject *__pyx_v_objects, PyObject *__pyx_v_hub, PyObject *__pyx_v_timeout, PyObject *__pyx_v_count) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "src/gevent/_hub_primitives.py":134
 * 
 *     def __init__(self, objects, hub, timeout, count):
 *         self._hub = hub             # <<<<<<<<<<<<<<
 *         self._waiter = MultipleWaiter(hub) # pylint:disable=undefined-variable
 *         self._switch = self._waiter.switch
*/
  if (!(likely(((__pyx_v_hub) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_hub, __pyx_mstate_global->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop))))) __PYX_ERR(0, 134, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_hub;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_hub);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_hub);
  __pyx_v_self->_hub = ((struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":135
 *     def __init__(self, objects, hub, timeout, count):
 *         self._hub = hub
 *         self._waiter = MultipleWaiter(hub) # pylint:disable=undefined-variable             # <<<<<<<<<<<<<<
 *         self._switch = self._waiter.switch
 *         self._timeout = timeout
*/
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_mstate_global->__pyx_ptype_6gevent_16_gevent_c_waiter_MultipleWaiter), __pyx_v_hub); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_waiter);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_waiter);
  __pyx_v_self->_waiter = ((struct __pyx_obj_6gevent_16_gevent_c_waiter_MultipleWaiter *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":136
 *         self._hub = hub
 *         self._waiter = MultipleWaiter(hub) # pylint:disable=undefined-variable
 *         self._switch = self._waiter.switch             # <<<<<<<<<<<<<<
 *         self._timeout = timeout
 *         self._objects = objects
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_waiter), __pyx_mstate_global->__pyx_n_u_switch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_switch);
  __Pyx_DECREF(__pyx_v_self->_switch);
  __pyx_v_self->_switch = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":137
 *         self._waiter = MultipleWaiter(hub) # pylint:disable=undefined-variable
 *         self._switch = self._waiter.switch
 *         self._timeout = timeout             # <<<<<<<<<<<<<<
 *         self._objects = objects
 * 
*/
  __Pyx_INCREF(__pyx_v_timeout);
  __Pyx_GIVEREF(__pyx_v_timeout);
  __Pyx_GOTREF(__pyx_v_self->_timeout);
  __Pyx_DECREF(__pyx_v_self->_timeout);
  __pyx_v_self->_timeout = __pyx_v_timeout;

  /* "src/gevent/_hub_primitives.py":138
 *         self._switch = self._waiter.switch
 *         self._timeout = timeout
 *         self._objects = objects             # <<<<<<<<<<<<<<
 * 
 *         self._timer = None
*/
  __Pyx_INCREF(__pyx_v_objects);
  __Pyx_GIVEREF(__pyx_v_objects);
  __Pyx_GOTREF(__pyx_v_self->_objects);
  __Pyx_DECREF(__pyx_v_self->_objects);
  __pyx_v_self->_objects = __pyx_v_objects;

  /* "src/gevent/_hub_primitives.py":140
 *         self._objects = objects
 * 
 *         self._timer = None             # <<<<<<<<<<<<<<
 *         self._begun = False
 * 
*/
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_timer);
  __Pyx_DECREF(__pyx_v_self->_timer);
  __pyx_v_self->_timer = Py_None;

  /* "src/gevent/_hub_primitives.py":141
 * 
 *         self._timer = None
 *         self._begun = False             # <<<<<<<<<<<<<<
 * 
 *         # Even if we're only going to return 1 object,
*/
  __pyx_v_self->_begun = 0;

  /* "src/gevent/_hub_primitives.py":146
 *         # we must still rawlink() *all* of them, so that no
 *         # matter which one finishes first we find it.
 *         self._count = len(objects) if count is None else min(count, len(objects))             # <<<<<<<<<<<<<<
 * 
 *     def _begin(self):
*/
  __pyx_t_3 = (__pyx_v_count == Py_None);
  if (__pyx_t_3) {
    __pyx_t_4 = PyObject_Length(__pyx_v_objects); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 146, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_4;
  } else {
    __pyx_t_4 = PyObject_Length(__pyx_v_objects); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 146, __pyx_L1_error)
    __Pyx_INCREF(__pyx_v_count);
    __pyx_t_1 = __pyx_v_count;
    __pyx_t_6 = PyLong_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 146, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyObject_RichCompare(__pyx_t_6, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 146, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 146, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (__pyx_t_8) {
      __pyx_t_7 = PyLong_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 146, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_5 = __pyx_t_7;
      __pyx_t_7 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_5 = __pyx_t_1;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_4 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 146, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_2 = __pyx_t_4;
  }
  __pyx_v_self->_count = __pyx_t_2;

  /* "src/gevent/_hub_primitives.py":133
 * class _WaitIterator(object):
 * 
 *     def __init__(self, objects, hub, timeout, count):             # <<<<<<<<<<<<<<
 *         self._hub = hub
 *         self._waiter = MultipleWaiter(hub) # pylint:disable=undefined-variable
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":148
 *         self._count = len(objects) if count is None else min(count, len(objects))
 * 
 *     def _begin(self):             # <<<<<<<<<<<<<<
 *         if self._begun:
 *             return
*/

static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator__begin(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self) {
  PyObject *__pyx_v_obj = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  unsigned int __pyx_t_7;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_begin", 0);

  /* "src/gevent/_hub_primitives.py":149
 * 
 *     def _begin(self):
 *         if self._begun:             # <<<<<<<<<<<<<<
 *             return
 * 
*/
  if (__pyx_v_self->_begun) {

    /* "src/gevent/_hub_primitives.py":150
 *     def _begin(self):
 *         if self._begun:
 *             return             # <<<<<<<<<<<<<<
 * 
 *         self._begun = True
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/gevent/_hub_primitives.py":149
 * 
 *     def _begin(self):
 *         if self._begun:             # <<<<<<<<<<<<<<
 *             return
 * 
*/
  }

  /* "src/gevent/_hub_primitives.py":152
 *             return
 * 
 *         self._begun = True             # <<<<<<<<<<<<<<
 * 
 *         # XXX: If iteration doesn't actually happen, we
*/
  __pyx_v_self->_begun = 1;

  /* "src/gevent/_hub_primitives.py":156
 *         # XXX: If iteration doesn't actually happen, we
 *         # could leave these links around!
 *         for obj in self._objects:             # <<<<<<<<<<<<<<
 *             obj.rawlink(self._switch)
 * 
*/
  if (likely(PyList_CheckExact(__pyx_v_self->_objects)) || PyTuple_CheckExact(__pyx_v_self->_objects)) {
    __pyx_t_1 = __pyx_v_self->_objects; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_self->_objects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 156, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 156, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_PyList_GetItemRef(__pyx_t_1, __pyx_t_2);
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 156, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_2++;
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 156, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 156, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2);
        if (unlikely((0 < 0))) __PYX_ERR(0, 156, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_2++;
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 156, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 156, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF_SET(__pyx_v_obj, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "src/gevent/_hub_primitives.py":157
 *         # could leave these links around!
 *         for obj in self._objects:
 *             obj.rawlink(self._switch)             # <<<<<<<<<<<<<<
 * 
 *         if self._timeout is not None:
*/
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_mstate_global->__pyx_n_u_rawlink); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 157, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_6);
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_self->_switch};
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 157, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "src/gevent/_hub_primitives.py":156
 *         # XXX: If iteration doesn't actually happen, we
 *         # could leave these links around!
 *         for obj in self._objects:             # <<<<<<<<<<<<<<
 *             obj.rawlink(self._switch)
 * 
*/
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":159
 *             obj.rawlink(self._switch)
 * 
 *         if self._timeout is not None:             # <<<<<<<<<<<<<<
 *             self._timer = self._hub.loop.timer(self._timeout, priority=-1)
 *             self._timer.start(self._switch, self)
*/
  __pyx_t_8 = (__pyx_v_self->_timeout != Py_None);
  if (__pyx_t_8) {

    /* "src/gevent/_hub_primitives.py":160
 * 
 *         if self._timeout is not None:
 *             self._timer = self._hub.loop.timer(self._timeout, priority=-1)             # <<<<<<<<<<<<<<
 *             self._timer.start(self._switch, self)
 * 
*/
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_hub->loop, __pyx_mstate_global->__pyx_n_u_timer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    __pyx_t_7 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_5);
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
    #endif
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    {
      PyObject *__pyx_callargs[2+ ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_5, __pyx_v_self->_timeout};
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_priority, __pyx_mstate_global->__pyx_int_neg_1, __pyx_t_6, __pyx_callargs+2, 0) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_v_self->_timer);
    __Pyx_DECREF(__pyx_v_self->_timer);
    __pyx_v_self->_timer = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "src/gevent/_hub_primitives.py":161
 *         if self._timeout is not None:
 *             self._timer = self._hub.loop.timer(self._timeout, priority=-1)
 *             self._timer.start(self._switch, self)             # <<<<<<<<<<<<<<
 * 
 *     def __iter__(self):
*/
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_timer, __pyx_mstate_global->__pyx_n_u_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 161, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_6);
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_self->_switch, ((PyObject *)__pyx_v_self)};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "src/gevent/_hub_primitives.py":159
 *             obj.rawlink(self._switch)
 * 
 *         if self._timeout is not None:             # <<<<<<<<<<<<<<
 *             self._timer = self._hub.loop.timer(self._timeout, priority=-1)
 *             self._timer.start(self._switch, self)
*/
  }

  /* "src/gevent/_hub_primitives.py":148
 *         self._count = len(objects) if count is None else min(count, len(objects))
 * 
 *     def _begin(self):             # <<<<<<<<<<<<<<
 *         if self._begun:
 *             return
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator._begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":163
 *             self._timer.start(self._switch, self)
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return self
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_3__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_3__iter__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_2__iter__(((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_2__iter__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);

  /* "src/gevent/_hub_primitives.py":164
 * 
 *     def __iter__(self):
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def __next__(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "src/gevent/_hub_primitives.py":163
 *             self._timer.start(self._switch, self)
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return self
 * 
*/

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":166
 *         return self
 * 
 *     def __next__(self):             # <<<<<<<<<<<<<<
 *         self._begin()
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_5__next__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_5__next__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__next__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_4__next__(((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_4__next__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self) {
  PyObject *__pyx_v_item = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_error_without_exception = 0; /* StopIteration */
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__next__", 0);

  /* "src/gevent/_hub_primitives.py":167
 * 
 *     def __next__(self):
 *         self._begin()             # <<<<<<<<<<<<<<
 * 
 *         if self._count == 0:
*/
  __pyx_t_1 = ((struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives__WaitIterator *)__pyx_v_self->__pyx_vtab)->_begin(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":169
 *         self._begin()
 * 
 *         if self._count == 0:             # <<<<<<<<<<<<<<
 *             # Exhausted
 *             self._cleanup()
*/
  __pyx_t_2 = (__pyx_v_self->_count == 0);
  if (unlikely(__pyx_t_2)) {

    /* "src/gevent/_hub_primitives.py":171
 *         if self._count == 0:
 *             # Exhausted
 *             self._cleanup()             # <<<<<<<<<<<<<<
 *             raise StopIteration()
 * 
*/
    __pyx_t_1 = ((struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives__WaitIterator *)__pyx_v_self->__pyx_vtab)->_cleanup(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "src/gevent/_hub_primitives.py":172
 *             # Exhausted
 *             self._cleanup()
 *             raise StopIteration()             # <<<<<<<<<<<<<<
 * 
 *         self._count -= 1
*/
    __pyx_error_without_exception = 1;
    goto __pyx_L1_error;;

    /* "src/gevent/_hub_primitives.py":169
 *         self._begin()
 * 
 *         if self._count == 0:             # <<<<<<<<<<<<<<
 *             # Exhausted
 *             self._cleanup()
*/
  }

  /* "src/gevent/_hub_primitives.py":174
 *             raise StopIteration()
 * 
 *         self._count -= 1             # <<<<<<<<<<<<<<
 *         try:
 *             item = self._waiter.get()
*/
  __pyx_v_self->_count = (__pyx_v_self->_count - 1);

  /* "src/gevent/_hub_primitives.py":175
 * 
 *         self._count -= 1
 *         try:             # <<<<<<<<<<<<<<
 *             item = self._waiter.get()
 *             self._waiter.clear()
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    /*try:*/ {

      /* "src/gevent/_hub_primitives.py":176
 *         self._count -= 1
 *         try:
 *             item = self._waiter.get()             # <<<<<<<<<<<<<<
 *             self._waiter.clear()
 *             if item is self:
*/
      __pyx_t_1 = ((struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_MultipleWaiter *)__pyx_v_self->_waiter->__pyx_base.__pyx_vtab)->__pyx_base.get(((struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter *)__pyx_v_self->_waiter), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_item = __pyx_t_1;
      __pyx_t_1 = 0;

      /* "src/gevent/_hub_primitives.py":177
 *         try:
 *             item = self._waiter.get()
 *             self._waiter.clear()             # <<<<<<<<<<<<<<
 *             if item is self:
 *                 # Timer expired, no more
*/
      __pyx_t_1 = ((struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_MultipleWaiter *)__pyx_v_self->_waiter->__pyx_base.__pyx_vtab)->__pyx_base.clear(((struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter *)__pyx_v_self->_waiter), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "src/gevent/_hub_primitives.py":178
 *             item = self._waiter.get()
 *             self._waiter.clear()
 *             if item is self:             # <<<<<<<<<<<<<<
 *                 # Timer expired, no more
 *                 self._cleanup()
*/
      __pyx_t_2 = (__pyx_v_item == ((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_t_2)) {

        /* "src/gevent/_hub_primitives.py":180
 *             if item is self:
 *                 # Timer expired, no more
 *                 self._cleanup()             # <<<<<<<<<<<<<<
 *                 raise StopIteration()
 *             return item
*/
        __pyx_t_1 = ((struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives__WaitIterator *)__pyx_v_self->__pyx_vtab)->_cleanup(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "src/gevent/_hub_primitives.py":181
 *                 # Timer expired, no more
 *                 self._cleanup()
 *                 raise StopIteration()             # <<<<<<<<<<<<<<
 *             return item
 *         except:
*/
        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_builtin_StopIteration); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(0, 181, __pyx_L4_error)

        /* "src/gevent/_hub_primitives.py":178
 *             item = self._waiter.get()
 *             self._waiter.clear()
 *             if item is self:             # <<<<<<<<<<<<<<
 *                 # Timer expired, no more
 *                 self._cleanup()
*/
      }

      /* "src/gevent/_hub_primitives.py":182
 *                 self._cleanup()
 *                 raise StopIteration()
 *             return item             # <<<<<<<<<<<<<<
 *         except:
 *             self._cleanup()
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_item);
      __pyx_r = __pyx_v_item;
      goto __pyx_L8_try_return;

      /* "src/gevent/_hub_primitives.py":175
 * 
 *         self._count -= 1
 *         try:             # <<<<<<<<<<<<<<
 *             item = self._waiter.get()
 *             self._waiter.clear()
*/
    }
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "src/gevent/_hub_primitives.py":183
 *                 raise StopIteration()
 *             return item
 *         except:             # <<<<<<<<<<<<<<
 *             self._cleanup()
 *             raise
*/
    /*except:*/ {
      __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 183, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);

      /* "src/gevent/_hub_primitives.py":184
 *             return item
 *         except:
 *             self._cleanup()             # <<<<<<<<<<<<<<
 *             raise
 * 
*/
      __pyx_t_8 = ((struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives__WaitIterator *)__pyx_v_self->__pyx_vtab)->_cleanup(__pyx_v_self); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 184, __pyx_L6_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "src/gevent/_hub_primitives.py":185
 *         except:
 *             self._cleanup()
 *             raise             # <<<<<<<<<<<<<<
 * 
 *     next = __next__
*/
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_6, __pyx_t_7);
      __pyx_t_1 = 0;  __pyx_t_6 = 0;  __pyx_t_7 = 0; 
      __PYX_ERR(0, 185, __pyx_L6_except_error)
    }

    /* "src/gevent/_hub_primitives.py":175
 * 
 *         self._count -= 1
 *         try:             # <<<<<<<<<<<<<<
 *             item = self._waiter.get()
 *             self._waiter.clear()
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L8_try_return:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L0;
  }

  /* "src/gevent/_hub_primitives.py":166
 *         return self
 * 
 *     def __next__(self):             # <<<<<<<<<<<<<<
 *         self._begin()
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  if (!__pyx_error_without_exception) {
    __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":189
 *     next = __next__
 * 
 *     def _cleanup(self):             # <<<<<<<<<<<<<<
 *         if self._timer is not None:
 *             self._timer.close()
*/

static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator__cleanup(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self) {
  PyObject *__pyx_v_objs = NULL;
  PyObject *__pyx_v_aobj = NULL;
  PyObject *__pyx_v_unlink = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  unsigned int __pyx_t_11;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_cleanup", 0);

  /* "src/gevent/_hub_primitives.py":190
 * 
 *     def _cleanup(self):
 *         if self._timer is not None:             # <<<<<<<<<<<<<<
 *             self._timer.close()
 *             self._timer = None
*/
  __pyx_t_1 = (__pyx_v_self->_timer != Py_None);
  if (__pyx_t_1) {

    /* "src/gevent/_hub_primitives.py":191
 *     def _cleanup(self):
 *         if self._timer is not None:
 *             self._timer.close()             # <<<<<<<<<<<<<<
 *             self._timer = None
 * 
*/
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_timer, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 191, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 191, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "src/gevent/_hub_primitives.py":192
 *         if self._timer is not None:
 *             self._timer.close()
 *             self._timer = None             # <<<<<<<<<<<<<<
 * 
 *         objs = self._objects
*/
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_timer);
    __Pyx_DECREF(__pyx_v_self->_timer);
    __pyx_v_self->_timer = Py_None;

    /* "src/gevent/_hub_primitives.py":190
 * 
 *     def _cleanup(self):
 *         if self._timer is not None:             # <<<<<<<<<<<<<<
 *             self._timer.close()
 *             self._timer = None
*/
  }

  /* "src/gevent/_hub_primitives.py":194
 *             self._timer = None
 * 
 *         objs = self._objects             # <<<<<<<<<<<<<<
 *         self._objects = ()
 *         for aobj in objs:
*/
  __pyx_t_3 = __pyx_v_self->_objects;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_objs = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "src/gevent/_hub_primitives.py":195
 * 
 *         objs = self._objects
 *         self._objects = ()             # <<<<<<<<<<<<<<
 *         for aobj in objs:
 *             unlink = getattr(aobj, 'unlink', None)
*/
  __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_empty_tuple);
  __Pyx_GOTREF(__pyx_v_self->_objects);
  __Pyx_DECREF(__pyx_v_self->_objects);
  __pyx_v_self->_objects = __pyx_mstate_global->__pyx_empty_tuple;

  /* "src/gevent/_hub_primitives.py":196
 *         objs = self._objects
 *         self._objects = ()
 *         for aobj in objs:             # <<<<<<<<<<<<<<
 *             unlink = getattr(aobj, 'unlink', None)
 *             if unlink is not None:
*/
  if (likely(PyList_CheckExact(__pyx_v_objs)) || PyTuple_CheckExact(__pyx_v_objs)) {
    __pyx_t_3 = __pyx_v_objs; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_objs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 196, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 196, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = __Pyx_PyList_GetItemRef(__pyx_t_3, __pyx_t_4);
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_4++;
        #else
        __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 196, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4);
        if (unlikely((0 < 0))) __PYX_ERR(0, 196, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_4++;
        #else
        __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      }
    } else {
      __pyx_t_2 = __pyx_t_5(__pyx_t_3);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 196, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XDECREF_SET(__pyx_v_aobj, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "src/gevent/_hub_primitives.py":197
 *         self._objects = ()
 *         for aobj in objs:
 *             unlink = getattr(aobj, 'unlink', None)             # <<<<<<<<<<<<<<
 *             if unlink is not None:
 *                 try:
*/
    __pyx_t_2 = __Pyx_GetAttr3(__pyx_v_aobj, __pyx_mstate_global->__pyx_n_u_unlink, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 197, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_unlink, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "src/gevent/_hub_primitives.py":198
 *         for aobj in objs:
 *             unlink = getattr(aobj, 'unlink', None)
 *             if unlink is not None:             # <<<<<<<<<<<<<<
 *                 try:
 *                     unlink(self._switch)
*/
    __pyx_t_1 = (__pyx_v_unlink != Py_None);
    if (__pyx_t_1) {

      /* "src/gevent/_hub_primitives.py":199
 *             unlink = getattr(aobj, 'unlink', None)
 *             if unlink is not None:
 *                 try:             # <<<<<<<<<<<<<<
 *                     unlink(self._switch)
 *                 except: # pylint:disable=bare-except
*/
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        /*try:*/ {

          /* "src/gevent/_hub_primitives.py":200
 *             if unlink is not None:
 *                 try:
 *                     unlink(self._switch)             # <<<<<<<<<<<<<<
 *                 except: # pylint:disable=bare-except
 *                     traceback.print_exc()
*/
          __Pyx_INCREF(__pyx_v_unlink);
          __pyx_t_9 = __pyx_v_unlink; __pyx_t_10 = NULL;
          __pyx_t_11 = 0;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_9))) {
            __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
            assert(__pyx_t_10);
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
            __pyx_t_11 = 1;
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_self->_switch};
            __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11);
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 200, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

          /* "src/gevent/_hub_primitives.py":199
 *             unlink = getattr(aobj, 'unlink', None)
 *             if unlink is not None:
 *                 try:             # <<<<<<<<<<<<<<
 *                     unlink(self._switch)
 *                 except: # pylint:disable=bare-except
*/
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L14_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;

        /* "src/gevent/_hub_primitives.py":201
 *                 try:
 *                     unlink(self._switch)
 *                 except: # pylint:disable=bare-except             # <<<<<<<<<<<<<<
 *                     traceback.print_exc()
 * 
*/
        /*except:*/ {
          __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator._cleanup", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_9, &__pyx_t_10) < 0) __PYX_ERR(0, 201, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_9);
          __Pyx_XGOTREF(__pyx_t_10);

          /* "src/gevent/_hub_primitives.py":202
 *                     unlink(self._switch)
 *                 except: # pylint:disable=bare-except
 *                     traceback.print_exc()             # <<<<<<<<<<<<<<
 * 
 *     def __enter__(self):
*/
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_6gevent_24_gevent_c_hub_primitives_traceback, __pyx_mstate_global->__pyx_n_u_print_exc); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 202, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_13 = __Pyx_PyObject_CallNoArg(__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 202, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          goto __pyx_L8_exception_handled;
        }

        /* "src/gevent/_hub_primitives.py":199
 *             unlink = getattr(aobj, 'unlink', None)
 *             if unlink is not None:
 *                 try:             # <<<<<<<<<<<<<<
 *                     unlink(self._switch)
 *                 except: # pylint:disable=bare-except
*/
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L14_try_end:;
      }

      /* "src/gevent/_hub_primitives.py":198
 *         for aobj in objs:
 *             unlink = getattr(aobj, 'unlink', None)
 *             if unlink is not None:             # <<<<<<<<<<<<<<
 *                 try:
 *                     unlink(self._switch)
*/
    }

    /* "src/gevent/_hub_primitives.py":196
 *         objs = self._objects
 *         self._objects = ()
 *         for aobj in objs:             # <<<<<<<<<<<<<<
 *             unlink = getattr(aobj, 'unlink', None)
 *             if unlink is not None:
*/
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/gevent/_hub_primitives.py":189
 *     next = __next__
 * 
 *     def _cleanup(self):             # <<<<<<<<<<<<<<
 *         if self._timer is not None:
 *             self._timer.close()
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator._cleanup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_objs);
  __Pyx_XDECREF(__pyx_v_aobj);
  __Pyx_XDECREF(__pyx_v_unlink);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":204
 *                     traceback.print_exc()
 * 
 *     def __enter__(self):             # <<<<<<<<<<<<<<
 *         return self
 * 
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_7__enter__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___enter__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self, int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__enter__", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 204, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_7__enter__)) {
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "src/gevent/_hub_primitives.py":205
 * 
 *     def __enter__(self):
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def __exit__(self, typ, value, tb):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "src/gevent/_hub_primitives.py":204
 *                     traceback.print_exc()
 * 
 *     def __enter__(self):             # <<<<<<<<<<<<<<
 *         return self
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_7__enter__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_6__enter__, "_WaitIterator.__enter__(self)");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_7__enter__ = {"__enter__", (PyCFunction)__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_7__enter__, METH_NOARGS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_6__enter__};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_7__enter__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__enter__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_6__enter__(((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_6__enter__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__enter__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___enter__(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":207
 *         return self
 * 
 *     def __exit__(self, typ, value, tb):             # <<<<<<<<<<<<<<
 *         self._cleanup()
 * 
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_9__exit__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___exit__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_typ, CYTHON_UNUSED PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v_tb, int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  unsigned int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__exit__", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 207, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_9__exit__)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          assert(__pyx_t_4);
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_5 = 1;
        }
        #endif
        {
          PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_typ, __pyx_v_value, __pyx_v_tb};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 207, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "src/gevent/_hub_primitives.py":208
 * 
 *     def __exit__(self, typ, value, tb):
 *         self._cleanup()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_1 = ((struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives__WaitIterator *)__pyx_v_self->__pyx_vtab)->_cleanup(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":207
 *         return self
 * 
 *     def __exit__(self, typ, value, tb):             # <<<<<<<<<<<<<<
 *         self._cleanup()
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_9__exit__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_8__exit__, "_WaitIterator.__exit__(self, typ, value, tb)");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_9__exit__ = {"__exit__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_9__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_8__exit__};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_9__exit__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_typ = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_tb = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__exit__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_typ,&__pyx_mstate_global->__pyx_n_u_value,&__pyx_mstate_global->__pyx_n_u_tb,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_typ)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 207, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_value)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 207, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 207, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_tb)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 207, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 207, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__exit__") < 0)) __PYX_ERR(0, 207, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_typ = values[0];
    __pyx_v_value = values[1];
    __pyx_v_tb = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 207, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_8__exit__(((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *)__pyx_v_self), __pyx_v_typ, __pyx_v_value, __pyx_v_tb);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_8__exit__(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *__pyx_v_self, PyObject *__pyx_v_typ, PyObject *__pyx_v_value, PyObject *__pyx_v_tb) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__exit__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___exit__(__pyx_v_self, __pyx_v_typ, __pyx_v_value, __pyx_v_tb, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._WaitIterator.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":211
 * 
 * 
 * def iwait_on_objects(objects, timeout=None, count=None):             # <<<<<<<<<<<<<<
 *     """
 *     Iteratively yield *objects* as they are ready, until all (or *count*) are ready
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_1iwait_on_objects(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_iwait_on_objects(PyObject *__pyx_v_objects, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_iwait_on_objects *__pyx_optional_args) {
  PyObject *__pyx_v_timeout = ((PyObject *)Py_None);
  PyObject *__pyx_v_count = ((PyObject *)Py_None);
  struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *__pyx_v_hub = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("iwait_on_objects", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_timeout = __pyx_optional_args->timeout;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_count = __pyx_optional_args->count;
      }
    }
  }

  /* "src/gevent/_hub_primitives.py":244
 *     """
 *     # QQQ would be nice to support iterable here that can be generated slowly (why?)
 *     hub = get_hub()             # <<<<<<<<<<<<<<
 *     if objects is None:
 *         return [hub.join(timeout=timeout)]
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_6gevent_19_gevent_c_hub_local_get_hub_noargs(0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_hub = ((struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":245
 *     # QQQ would be nice to support iterable here that can be generated slowly (why?)
 *     hub = get_hub()
 *     if objects is None:             # <<<<<<<<<<<<<<
 *         return [hub.join(timeout=timeout)]
 *     return _WaitIterator(objects, hub, timeout, count)
*/
  __pyx_t_2 = (__pyx_v_objects == Py_None);
  if (__pyx_t_2) {

    /* "src/gevent/_hub_primitives.py":246
 *     hub = get_hub()
 *     if objects is None:
 *         return [hub.join(timeout=timeout)]             # <<<<<<<<<<<<<<
 *     return _WaitIterator(objects, hub, timeout, count)
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_hub), __pyx_mstate_global->__pyx_n_u_join); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_4);
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
    #endif
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    {
      PyObject *__pyx_callargs[2+ ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, NULL};
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_timeout, __pyx_v_timeout, __pyx_t_6, __pyx_callargs+1, 0) < 0) __PYX_ERR(0, 246, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 246, __pyx_L1_error);
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "src/gevent/_hub_primitives.py":245
 *     # QQQ would be nice to support iterable here that can be generated slowly (why?)
 *     hub = get_hub()
 *     if objects is None:             # <<<<<<<<<<<<<<
 *         return [hub.join(timeout=timeout)]
 *     return _WaitIterator(objects, hub, timeout, count)
*/
  }

  /* "src/gevent/_hub_primitives.py":247
 *     if objects is None:
 *         return [hub.join(timeout=timeout)]
 *     return _WaitIterator(objects, hub, timeout, count)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_objects);
  __Pyx_GIVEREF(__pyx_v_objects);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_objects) != (0)) __PYX_ERR(0, 247, __pyx_L1_error);
  __Pyx_INCREF((PyObject *)__pyx_v_hub);
  __Pyx_GIVEREF((PyObject *)__pyx_v_hub);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_hub)) != (0)) __PYX_ERR(0, 247, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_timeout);
  __Pyx_GIVEREF(__pyx_v_timeout);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_timeout) != (0)) __PYX_ERR(0, 247, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_count);
  __Pyx_GIVEREF(__pyx_v_count);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_count) != (0)) __PYX_ERR(0, 247, __pyx_L1_error);
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/gevent/_hub_primitives.py":211
 * 
 * 
 * def iwait_on_objects(objects, timeout=None, count=None):             # <<<<<<<<<<<<<<
 *     """
 *     Iteratively yield *objects* as they are ready, until all (or *count*) are ready
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.iwait_on_objects", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_hub);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_1iwait_on_objects(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_iwait_on_objects, "iwait_on_objects(objects, timeout=None, count=None)\nIteratively yield *objects* as they are ready, until all (or *count*) are ready\nor *timeout* expired.\n\nIf you will only be consuming a portion of the *objects*, you should\ndo so inside a ``with`` block on this object to avoid leaking resources::\n\n    with gevent.iwait((a, b, c)) as it:\n        for i in it:\n            if i is a:\n                break\n\n:param objects: A sequence (supporting :func:`len`) containing objects\n    implementing the wait protocol (rawlink() and unlink()).\n:keyword int count: If not `None`, then a number specifying the maximum number\n    of objects to wait for. If ``None`` (the default), all objects\n    are waited for.\n:keyword float timeout: If given, specifies a maximum number of seconds\n    to wait. If the timeout expires before the desired waited-for objects\n    are available, then this method returns immediately.\n\n.. seealso:: :func:`wait`\n\n.. versionchanged:: 1.1a1\n   Add the *count* parameter.\n.. versionchanged:: 1.1a2\n   No longer raise :exc:`LoopExit` if our caller switches greenlets\n   in between items yielded by this function.\n.. versionchanged:: 1.4\n   Add support to use the returned object as a context manager.");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_1iwait_on_objects = {"iwait_on_objects", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_1iwait_on_objects, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_iwait_on_objects};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_1iwait_on_objects(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_objects = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_count = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iwait_on_objects (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_objects,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_count,0};
    values[1] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    values[2] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_objects)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[1]);
            values[1] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_count);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[2]);
            values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "iwait_on_objects") < 0)) __PYX_ERR(0, 211, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_objects = values[0];
    __pyx_v_timeout = values[1];
    __pyx_v_count = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("iwait_on_objects", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 211, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.iwait_on_objects", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_iwait_on_objects(__pyx_self, __pyx_v_objects, __pyx_v_timeout, __pyx_v_count);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_iwait_on_objects(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_objects, PyObject *__pyx_v_timeout, PyObject *__pyx_v_count) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_iwait_on_objects __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("iwait_on_objects", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.timeout = __pyx_v_timeout;
  __pyx_t_2.count = __pyx_v_count;
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_iwait_on_objects(__pyx_v_objects, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 211, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.iwait_on_objects", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":250
 * 
 * 
 * def wait_on_objects(objects=None, timeout=None, count=None):             # <<<<<<<<<<<<<<
 *     """
 *     Wait for *objects* to become ready or for event loop to finish.
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_3wait_on_objects(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_objects(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_objects *__pyx_optional_args) {
  PyObject *__pyx_v_objects = ((PyObject *)Py_None);
  PyObject *__pyx_v_timeout = ((PyObject *)Py_None);
  PyObject *__pyx_v_count = ((PyObject *)Py_None);
  struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *__pyx_v_hub = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_iwait_on_objects __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_on_objects", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_objects = __pyx_optional_args->objects;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_timeout = __pyx_optional_args->timeout;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_count = __pyx_optional_args->count;
        }
      }
    }
  }

  /* "src/gevent/_hub_primitives.py":284
 *     .. seealso:: :func:`iwait`
 *     """
 *     if objects is None:             # <<<<<<<<<<<<<<
 *         hub = get_hub()
 *         return hub.join(timeout=timeout) # pylint:disable=
*/
  __pyx_t_1 = (__pyx_v_objects == Py_None);
  if (__pyx_t_1) {

    /* "src/gevent/_hub_primitives.py":285
 *     """
 *     if objects is None:
 *         hub = get_hub()             # <<<<<<<<<<<<<<
 *         return hub.join(timeout=timeout) # pylint:disable=
 *     return list(iwait_on_objects(objects, timeout, count))
*/
    __pyx_t_2 = ((PyObject *)__pyx_f_6gevent_19_gevent_c_hub_local_get_hub_noargs(0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_hub = ((struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "src/gevent/_hub_primitives.py":286
 *     if objects is None:
 *         hub = get_hub()
 *         return hub.join(timeout=timeout) # pylint:disable=             # <<<<<<<<<<<<<<
 *     return list(iwait_on_objects(objects, timeout, count))
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_hub), __pyx_mstate_global->__pyx_n_u_join); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_4);
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
    #endif
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    {
      PyObject *__pyx_callargs[2+ ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, NULL};
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_timeout, __pyx_v_timeout, __pyx_t_6, __pyx_callargs+1, 0) < 0) __PYX_ERR(0, 286, __pyx_L1_error)
      __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 286, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "src/gevent/_hub_primitives.py":284
 *     .. seealso:: :func:`iwait`
 *     """
 *     if objects is None:             # <<<<<<<<<<<<<<
 *         hub = get_hub()
 *         return hub.join(timeout=timeout) # pylint:disable=
*/
  }

  /* "src/gevent/_hub_primitives.py":287
 *         hub = get_hub()
 *         return hub.join(timeout=timeout) # pylint:disable=
 *     return list(iwait_on_objects(objects, timeout, count))             # <<<<<<<<<<<<<<
 * 
 * _timeout_error = Exception
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7.__pyx_n = 2;
  __pyx_t_7.timeout = __pyx_v_timeout;
  __pyx_t_7.count = __pyx_v_count;
  __pyx_t_2 = __pyx_f_6gevent_24_gevent_c_hub_primitives_iwait_on_objects(__pyx_v_objects, 0, &__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PySequence_ListKeepNew(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/gevent/_hub_primitives.py":250
 * 
 * 
 * def wait_on_objects(objects=None, timeout=None, count=None):             # <<<<<<<<<<<<<<
 *     """
 *     Wait for *objects* to become ready or for event loop to finish.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_on_objects", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_hub);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_3wait_on_objects(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_2wait_on_objects, "wait_on_objects(objects=None, timeout=None, count=None)\nWait for *objects* to become ready or for event loop to finish.\n\nIf *objects* is provided, it must be a list containing objects\nimplementing the wait protocol (rawlink() and unlink() methods):\n\n- :class:`gevent.Greenlet` instance\n- :class:`gevent.event.Event` instance\n- :class:`gevent.lock.Semaphore` instance\n- :class:`gevent.subprocess.Popen` instance\n\nIf *objects* is ``None`` (the default), ``wait()`` blocks until\nthe current event loop has nothing to do (or until *timeout* passes):\n\n- all greenlets have finished\n- all servers were stopped\n- all event loop watchers were stopped.\n\nIf *count* is ``None`` (the default), wait for all *objects*\nto become ready.\n\nIf *count* is a number, wait for (up to) *count* objects to become\nready. (For example, if count is ``1`` then the function exits\nwhen any object in the list is ready).\n\nIf *timeout* is provided, it specifies the maximum number of\nseconds ``wait()`` will block.\n\nReturns the list of ready objects, in the order in which they were\nready.\n\n.. seealso:: :func:`iwait`");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_3wait_on_objects = {"wait_on_objects", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_3wait_on_objects, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_2wait_on_objects};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_3wait_on_objects(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_objects = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_count = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wait_on_objects (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_objects,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_count,0};
    values[0] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    values[1] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    values[2] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        __Pyx_Arg_XDECREF_FASTCALL(values[0]);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_objects);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[0]);
            values[0] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 250, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[1]);
            values[1] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 250, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_count);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[2]);
            values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 250, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wait_on_objects") < 0)) __PYX_ERR(0, 250, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        __Pyx_Arg_XDECREF_FASTCALL(values[0]);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_objects = values[0];
    __pyx_v_timeout = values[1];
    __pyx_v_count = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait_on_objects", 0, 0, 3, __pyx_nargs); __PYX_ERR(0, 250, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_on_objects", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_2wait_on_objects(__pyx_self, __pyx_v_objects, __pyx_v_timeout, __pyx_v_count);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_2wait_on_objects(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_objects, PyObject *__pyx_v_timeout, PyObject *__pyx_v_count) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_objects __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_on_objects", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.objects = __pyx_v_objects;
  __pyx_t_2.timeout = __pyx_v_timeout;
  __pyx_t_2.count = __pyx_v_count;
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_objects(1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 250, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_on_objects", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":291
 * _timeout_error = Exception
 * 
 * def set_default_timeout_error(e):             # <<<<<<<<<<<<<<
 *     global _timeout_error
 *     _timeout_error = e
*/

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_5set_default_timeout_error(PyObject *__pyx_self, PyObject *__pyx_v_e); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_4set_default_timeout_error, "set_default_timeout_error(e)");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_5set_default_timeout_error = {"set_default_timeout_error", (PyCFunction)__pyx_pw_6gevent_24_gevent_c_hub_primitives_5set_default_timeout_error, METH_O, __pyx_doc_6gevent_24_gevent_c_hub_primitives_4set_default_timeout_error};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_5set_default_timeout_error(PyObject *__pyx_self, PyObject *__pyx_v_e) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_default_timeout_error (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_4set_default_timeout_error(__pyx_self, ((PyObject *)__pyx_v_e));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_4set_default_timeout_error(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_e) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_default_timeout_error", 0);

  /* "src/gevent/_hub_primitives.py":293
 * def set_default_timeout_error(e):
 *     global _timeout_error
 *     _timeout_error = e             # <<<<<<<<<<<<<<
 * 
 * def _primitive_wait(watcher, timeout, timeout_exc, hub):
*/
  __Pyx_INCREF(__pyx_v_e);
  __Pyx_XGOTREF(__pyx_v_6gevent_24_gevent_c_hub_primitives__timeout_error);
  __Pyx_DECREF_SET(__pyx_v_6gevent_24_gevent_c_hub_primitives__timeout_error, __pyx_v_e);
  __Pyx_GIVEREF(__pyx_v_e);

  /* "src/gevent/_hub_primitives.py":291
 * _timeout_error = Exception
 * 
 * def set_default_timeout_error(e):             # <<<<<<<<<<<<<<
 *     global _timeout_error
 *     _timeout_error = e
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":295
 *     _timeout_error = e
 * 
 * def _primitive_wait(watcher, timeout, timeout_exc, hub):             # <<<<<<<<<<<<<<
 *     if watcher.callback is not None:
 *         raise ConcurrentObjectUseError('This socket is already used by another greenlet: %r'
*/

static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives__primitive_wait(PyObject *__pyx_v_watcher, PyObject *__pyx_v_timeout, PyObject *__pyx_v_timeout_exc, struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_hub) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  unsigned int __pyx_t_6;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_primitive_wait", 0);
  __Pyx_INCREF(__pyx_v_timeout);
  __Pyx_INCREF((PyObject *)__pyx_v_hub);

  /* "src/gevent/_hub_primitives.py":296
 * 
 * def _primitive_wait(watcher, timeout, timeout_exc, hub):
 *     if watcher.callback is not None:             # <<<<<<<<<<<<<<
 *         raise ConcurrentObjectUseError('This socket is already used by another greenlet: %r'
 *                                        % (watcher.callback, ))
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_callback); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 != Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_2)) {

    /* "src/gevent/_hub_primitives.py":297
 * def _primitive_wait(watcher, timeout, timeout_exc, hub):
 *     if watcher.callback is not None:
 *         raise ConcurrentObjectUseError('This socket is already used by another greenlet: %r'             # <<<<<<<<<<<<<<
 *                                        % (watcher.callback, ))
 * 
*/
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConcurrentObjectUseError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    /* "src/gevent/_hub_primitives.py":298
 *     if watcher.callback is not None:
 *         raise ConcurrentObjectUseError('This socket is already used by another greenlet: %r'
 *                                        % (watcher.callback, ))             # <<<<<<<<<<<<<<
 * 
 *     if hub is None:
*/
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_watcher, __pyx_mstate_global->__pyx_n_u_callback); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_4), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "src/gevent/_hub_primitives.py":297
 * def _primitive_wait(watcher, timeout, timeout_exc, hub):
 *     if watcher.callback is not None:
 *         raise ConcurrentObjectUseError('This socket is already used by another greenlet: %r'             # <<<<<<<<<<<<<<
 *                                        % (watcher.callback, ))
 * 
*/
    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_This_socket_is_already_used_by_a, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_5);
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 297, __pyx_L1_error)

    /* "src/gevent/_hub_primitives.py":296
 * 
 * def _primitive_wait(watcher, timeout, timeout_exc, hub):
 *     if watcher.callback is not None:             # <<<<<<<<<<<<<<
 *         raise ConcurrentObjectUseError('This socket is already used by another greenlet: %r'
 *                                        % (watcher.callback, ))
*/
  }

  /* "src/gevent/_hub_primitives.py":300
 *                                        % (watcher.callback, ))
 * 
 *     if hub is None:             # <<<<<<<<<<<<<<
 *         hub = get_hub()
 * 
*/
  __pyx_t_2 = (((PyObject *)__pyx_v_hub) == Py_None);
  if (__pyx_t_2) {

    /* "src/gevent/_hub_primitives.py":301
 * 
 *     if hub is None:
 *         hub = get_hub()             # <<<<<<<<<<<<<<
 * 
 *     if timeout is None:
*/
    __pyx_t_1 = ((PyObject *)__pyx_f_6gevent_19_gevent_c_hub_local_get_hub_noargs(0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet))))) __PYX_ERR(0, 301, __pyx_L1_error)
    __Pyx_DECREF_SET(__pyx_v_hub, ((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "src/gevent/_hub_primitives.py":300
 *                                        % (watcher.callback, ))
 * 
 *     if hub is None:             # <<<<<<<<<<<<<<
 *         hub = get_hub()
 * 
*/
  }

  /* "src/gevent/_hub_primitives.py":303
 *         hub = get_hub()
 * 
 *     if timeout is None:             # <<<<<<<<<<<<<<
 *         hub.wait(watcher)
 *         return
*/
  __pyx_t_2 = (__pyx_v_timeout == Py_None);
  if (__pyx_t_2) {

    /* "src/gevent/_hub_primitives.py":304
 * 
 *     if timeout is None:
 *         hub.wait(watcher)             # <<<<<<<<<<<<<<
 *         return
 * 
*/
    __pyx_t_1 = ((struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_hub->__pyx_base.__pyx_vtab)->wait(__pyx_v_hub, __pyx_v_watcher, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "src/gevent/_hub_primitives.py":305
 *     if timeout is None:
 *         hub.wait(watcher)
 *         return             # <<<<<<<<<<<<<<
 * 
 *     timeout = Timeout._start_new_or_dummy(
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/gevent/_hub_primitives.py":303
 *         hub = get_hub()
 * 
 *     if timeout is None:             # <<<<<<<<<<<<<<
 *         hub.wait(watcher)
 *         return
*/
  }

  /* "src/gevent/_hub_primitives.py":307
 *         return
 * 
 *     timeout = Timeout._start_new_or_dummy(             # <<<<<<<<<<<<<<
 *         timeout,
 *         (timeout_exc
*/
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_6gevent_24_gevent_c_hub_primitives_Timeout, __pyx_mstate_global->__pyx_n_u_start_new_or_dummy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "src/gevent/_hub_primitives.py":310
 *         timeout,
 *         (timeout_exc
 *          if timeout_exc is not _NONE or timeout is None             # <<<<<<<<<<<<<<
 *          else _timeout_error('timed out')))
 * 
*/
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = (__pyx_v_timeout_exc != __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!__pyx_t_7) {
  } else {
    __pyx_t_2 = __pyx_t_7;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_7 = (__pyx_v_timeout == Py_None);
  __pyx_t_2 = __pyx_t_7;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_2) {

    /* "src/gevent/_hub_primitives.py":309
 *     timeout = Timeout._start_new_or_dummy(
 *         timeout,
 *         (timeout_exc             # <<<<<<<<<<<<<<
 *          if timeout_exc is not _NONE or timeout is None
 *          else _timeout_error('timed out')))
*/
    __Pyx_INCREF(__pyx_v_timeout_exc);
    __pyx_t_4 = __pyx_v_timeout_exc;
  } else {

    /* "src/gevent/_hub_primitives.py":311
 *         (timeout_exc
 *          if timeout_exc is not _NONE or timeout is None
 *          else _timeout_error('timed out')))             # <<<<<<<<<<<<<<
 * 
 *     with timeout:
*/
    __Pyx_INCREF(__pyx_v_6gevent_24_gevent_c_hub_primitives__timeout_error);
    __pyx_t_8 = __pyx_v_6gevent_24_gevent_c_hub_primitives__timeout_error; __pyx_t_9 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_9);
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_6 = 1;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_timed_out};
      __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 311, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __pyx_t_4 = __pyx_t_5;
    __pyx_t_5 = 0;
  }
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_5);
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_3, function);
    __pyx_t_6 = 1;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_timeout, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF_SET(__pyx_v_timeout, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":313
 *          else _timeout_error('timed out')))
 * 
 *     with timeout:             # <<<<<<<<<<<<<<
 *         hub.wait(watcher)
 * 
*/
  /*with:*/ {
    __pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_v_timeout, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_timeout, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 313, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_13);
        /*try:*/ {

          /* "src/gevent/_hub_primitives.py":314
 * 
 *     with timeout:
 *         hub.wait(watcher)             # <<<<<<<<<<<<<<
 * 
 * # Suitable to be bound as an instance method
*/
          __pyx_t_3 = ((struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_hub->__pyx_base.__pyx_vtab)->wait(__pyx_v_hub, __pyx_v_watcher, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 314, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

          /* "src/gevent/_hub_primitives.py":313
 *          else _timeout_error('timed out')))
 * 
 *     with timeout:             # <<<<<<<<<<<<<<
 *         hub.wait(watcher)
 * 
*/
        }
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        goto __pyx_L17_try_end;
        __pyx_L12_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._primitive_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_4) < 0) __PYX_ERR(0, 313, __pyx_L14_except_error)
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_1);
          __Pyx_XGOTREF(__pyx_t_4);
          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 313, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_5, NULL);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 313, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (__pyx_t_2 < 0) __PYX_ERR(0, 313, __pyx_L14_except_error)
          __pyx_t_7 = (!__pyx_t_2);
          if (unlikely(__pyx_t_7)) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_XGIVEREF(__pyx_t_4);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_1, __pyx_t_4);
            __pyx_t_3 = 0;  __pyx_t_1 = 0;  __pyx_t_4 = 0; 
            __PYX_ERR(0, 313, __pyx_L14_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L13_exception_handled;
        }
        __pyx_L14_except_error:;
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        goto __pyx_L1_error;
        __pyx_L13_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        __pyx_L17_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_10) {
          __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_mstate_global->__pyx_tuple[0], NULL);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 313, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        }
        goto __pyx_L11;
      }
      __pyx_L11:;
    }
    goto __pyx_L21;
    __pyx_L8_error:;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L1_error;
    __pyx_L21:;
  }

  /* "src/gevent/_hub_primitives.py":295
 *     _timeout_error = e
 * 
 * def _primitive_wait(watcher, timeout, timeout_exc, hub):             # <<<<<<<<<<<<<<
 *     if watcher.callback is not None:
 *         raise ConcurrentObjectUseError('This socket is already used by another greenlet: %r'
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._primitive_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_timeout);
  __Pyx_XDECREF((PyObject *)__pyx_v_hub);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":317
 * 
 * # Suitable to be bound as an instance method
 * def wait_on_socket(socket, watcher, timeout_exc=None):             # <<<<<<<<<<<<<<
 *     if socket is None or watcher is None:
 *         # test__hub TestCloseSocketWhilePolling, on Python 2; Python 3
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_7wait_on_socket(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_socket(PyObject *__pyx_v_socket, PyObject *__pyx_v_watcher, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_socket *__pyx_optional_args) {
  PyObject *__pyx_v_timeout_exc = ((PyObject *)Py_None);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  unsigned int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_on_socket", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_timeout_exc = __pyx_optional_args->timeout_exc;
    }
  }

  /* "src/gevent/_hub_primitives.py":318
 * # Suitable to be bound as an instance method
 * def wait_on_socket(socket, watcher, timeout_exc=None):
 *     if socket is None or watcher is None:             # <<<<<<<<<<<<<<
 *         # test__hub TestCloseSocketWhilePolling, on Python 2; Python 3
 *         # catches the EBADF differently.
*/
  __pyx_t_2 = (__pyx_v_socket == Py_None);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_watcher == Py_None);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "src/gevent/_hub_primitives.py":321
 *         # test__hub TestCloseSocketWhilePolling, on Python 2; Python 3
 *         # catches the EBADF differently.
 *         raise ConcurrentObjectUseError("The socket has already been closed by another greenlet")             # <<<<<<<<<<<<<<
 *     _primitive_wait(watcher, socket.timeout,
 *                     timeout_exc if timeout_exc is not None else _NONE,
*/
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConcurrentObjectUseError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 321, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_5);
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_The_socket_has_already_been_clos};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 321, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 321, __pyx_L1_error)

    /* "src/gevent/_hub_primitives.py":318
 * # Suitable to be bound as an instance method
 * def wait_on_socket(socket, watcher, timeout_exc=None):
 *     if socket is None or watcher is None:             # <<<<<<<<<<<<<<
 *         # test__hub TestCloseSocketWhilePolling, on Python 2; Python 3
 *         # catches the EBADF differently.
*/
  }

  /* "src/gevent/_hub_primitives.py":322
 *         # catches the EBADF differently.
 *         raise ConcurrentObjectUseError("The socket has already been closed by another greenlet")
 *     _primitive_wait(watcher, socket.timeout,             # <<<<<<<<<<<<<<
 *                     timeout_exc if timeout_exc is not None else _NONE,
 *                     socket.hub)
*/
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_socket, __pyx_mstate_global->__pyx_n_u_timeout); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "src/gevent/_hub_primitives.py":323
 *         raise ConcurrentObjectUseError("The socket has already been closed by another greenlet")
 *     _primitive_wait(watcher, socket.timeout,
 *                     timeout_exc if timeout_exc is not None else _NONE,             # <<<<<<<<<<<<<<
 *                     socket.hub)
 * 
*/
  __pyx_t_1 = (__pyx_v_timeout_exc != Py_None);
  if (__pyx_t_1) {
    __Pyx_INCREF(__pyx_v_timeout_exc);
    __pyx_t_4 = __pyx_v_timeout_exc;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __pyx_t_5;
    __pyx_t_5 = 0;
  }

  /* "src/gevent/_hub_primitives.py":324
 *     _primitive_wait(watcher, socket.timeout,
 *                     timeout_exc if timeout_exc is not None else _NONE,
 *                     socket.hub)             # <<<<<<<<<<<<<<
 * 
 * def wait_on_watcher(watcher, timeout=None, timeout_exc=_NONE, hub=None):
*/
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_socket, __pyx_mstate_global->__pyx_n_u_hub); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet))))) __PYX_ERR(0, 324, __pyx_L1_error)

  /* "src/gevent/_hub_primitives.py":322
 *         # catches the EBADF differently.
 *         raise ConcurrentObjectUseError("The socket has already been closed by another greenlet")
 *     _primitive_wait(watcher, socket.timeout,             # <<<<<<<<<<<<<<
 *                     timeout_exc if timeout_exc is not None else _NONE,
 *                     socket.hub)
*/
  __pyx_t_7 = __pyx_f_6gevent_24_gevent_c_hub_primitives__primitive_wait(__pyx_v_watcher, __pyx_t_3, __pyx_t_4, ((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_t_5)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/gevent/_hub_primitives.py":317
 * 
 * # Suitable to be bound as an instance method
 * def wait_on_socket(socket, watcher, timeout_exc=None):             # <<<<<<<<<<<<<<
 *     if socket is None or watcher is None:
 *         # test__hub TestCloseSocketWhilePolling, on Python 2; Python 3
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_on_socket", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_7wait_on_socket(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_6wait_on_socket, "wait_on_socket(socket, watcher, timeout_exc=None)");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_7wait_on_socket = {"wait_on_socket", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_7wait_on_socket, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_6wait_on_socket};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_7wait_on_socket(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_socket = 0;
  PyObject *__pyx_v_watcher = 0;
  PyObject *__pyx_v_timeout_exc = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wait_on_socket (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_socket,&__pyx_mstate_global->__pyx_n_u_watcher,&__pyx_mstate_global->__pyx_n_u_timeout_exc,0};
    values[2] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_socket)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 317, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_watcher)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 317, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("wait_on_socket", 0, 2, 3, 1); __PYX_ERR(0, 317, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout_exc);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[2]);
            values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 317, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wait_on_socket") < 0)) __PYX_ERR(0, 317, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_socket = values[0];
    __pyx_v_watcher = values[1];
    __pyx_v_timeout_exc = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait_on_socket", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 317, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_on_socket", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_6wait_on_socket(__pyx_self, __pyx_v_socket, __pyx_v_watcher, __pyx_v_timeout_exc);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_6wait_on_socket(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_socket, PyObject *__pyx_v_watcher, PyObject *__pyx_v_timeout_exc) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_socket __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_on_socket", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.timeout_exc = __pyx_v_timeout_exc;
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_socket(__pyx_v_socket, __pyx_v_watcher, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_on_socket", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":326
 *                     socket.hub)
 * 
 * def wait_on_watcher(watcher, timeout=None, timeout_exc=_NONE, hub=None):             # <<<<<<<<<<<<<<
 *     """
 *     wait(watcher, timeout=None, [timeout_exc=None]) -> None
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_9wait_on_watcher(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_watcher(PyObject *__pyx_v_watcher, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_watcher *__pyx_optional_args) {
  PyObject *__pyx_v_timeout = ((PyObject *)Py_None);
  PyObject *__pyx_v_timeout_exc = __pyx_mstate_global->__pyx_k__2;
  struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_hub = ((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)Py_None);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_on_watcher", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_timeout = __pyx_optional_args->timeout;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_timeout_exc = __pyx_optional_args->timeout_exc;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_hub = __pyx_optional_args->hub;
        }
      }
    }
  }

  /* "src/gevent/_hub_primitives.py":350
 *         already started.
 *     """
 *     _primitive_wait(watcher, timeout, timeout_exc, hub)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives__primitive_wait(__pyx_v_watcher, __pyx_v_timeout, __pyx_v_timeout_exc, __pyx_v_hub); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":326
 *                     socket.hub)
 * 
 * def wait_on_watcher(watcher, timeout=None, timeout_exc=_NONE, hub=None):             # <<<<<<<<<<<<<<
 *     """
 *     wait(watcher, timeout=None, [timeout_exc=None]) -> None
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_on_watcher", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_9wait_on_watcher(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_8wait_on_watcher, "wait_on_watcher(watcher, timeout=None, timeout_exc=_NONE, WaitOperationsGreenlet hub=None)\nwait(watcher, timeout=None, [timeout_exc=None]) -> None\n\nBlock the current greenlet until *watcher* is ready.\n\nIf *timeout* is non-negative, then *timeout_exc* is raised after\n*timeout* second has passed.\n\nIf :func:`cancel_wait` is called on *watcher* by another greenlet,\nraise an exception in this blocking greenlet\n(``socket.error(EBADF, 'File descriptor was closed in another\ngreenlet')`` by default).\n\n:param watcher: An event loop watcher, most commonly an IO watcher obtained from\n    :meth:`gevent.core.loop.io`\n:keyword timeout_exc: The exception to raise if the timeout expires.\n    By default, a :class:`socket.timeout` exception is raised.\n    If you pass a value for this keyword, it is interpreted as for\n    :class:`gevent.timeout.Timeout`.\n\n:raises ~gevent.hub.ConcurrentObjectUseError: If the *watcher* is\n    already started.");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_9wait_on_watcher = {"wait_on_watcher", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_9wait_on_watcher, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_8wait_on_watcher};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_9wait_on_watcher(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_watcher = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_timeout_exc = 0;
  struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_hub = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wait_on_watcher (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_watcher,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_timeout_exc,&__pyx_mstate_global->__pyx_n_u_hub,0};
    values[1] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    values[2] = __Pyx_Arg_NewRef_FASTCALL(__pyx_mstate_global->__pyx_k__2);
    values[3] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4:
        __Pyx_Arg_XDECREF_FASTCALL(values[3]);
        values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_watcher)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 326, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[1]);
            values[1] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 326, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout_exc);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[2]);
            values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 326, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_hub);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[3]);
            values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 326, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wait_on_watcher") < 0)) __PYX_ERR(0, 326, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4:
        __Pyx_Arg_XDECREF_FASTCALL(values[3]);
        values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_watcher = values[0];
    __pyx_v_timeout = values[1];
    __pyx_v_timeout_exc = values[2];
    __pyx_v_hub = ((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)values[3]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait_on_watcher", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 326, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_on_watcher", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_hub), __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, 1, "hub", 0))) __PYX_ERR(0, 326, __pyx_L1_error)
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_8wait_on_watcher(__pyx_self, __pyx_v_watcher, __pyx_v_timeout, __pyx_v_timeout_exc, __pyx_v_hub);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_8wait_on_watcher(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_watcher, PyObject *__pyx_v_timeout, PyObject *__pyx_v_timeout_exc, struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *__pyx_v_hub) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_watcher __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_on_watcher", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.timeout = __pyx_v_timeout;
  __pyx_t_2.timeout_exc = __pyx_v_timeout_exc;
  __pyx_t_2.hub = __pyx_v_hub;
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_watcher(__pyx_v_watcher, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_on_watcher", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":353
 * 
 * 
 * def wait_read(fileno, timeout=None, timeout_exc=_NONE):             # <<<<<<<<<<<<<<
 *     """
 *     wait_read(fileno, timeout=None, [timeout_exc=None]) -> None
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_11wait_read(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_read(PyObject *__pyx_v_fileno, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_read *__pyx_optional_args) {
  PyObject *__pyx_v_timeout = ((PyObject *)Py_None);
  PyObject *__pyx_v_timeout_exc = __pyx_mstate_global->__pyx_k__3;
  struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *__pyx_v_hub = NULL;
  PyObject *__pyx_v_io = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  unsigned int __pyx_t_4;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_watcher __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  char const *__pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_read", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_timeout = __pyx_optional_args->timeout;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_timeout_exc = __pyx_optional_args->timeout_exc;
      }
    }
  }

  /* "src/gevent/_hub_primitives.py":364
 *     .. seealso:: :func:`cancel_wait`
 *     """
 *     hub = get_hub()             # <<<<<<<<<<<<<<
 *     io = hub.loop.io(fileno, 1)
 *     try:
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_6gevent_19_gevent_c_hub_local_get_hub_noargs(0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_hub = ((struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":365
 *     """
 *     hub = get_hub()
 *     io = hub.loop.io(fileno, 1)             # <<<<<<<<<<<<<<
 *     try:
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_hub->loop, __pyx_mstate_global->__pyx_n_u_io); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_2, function);
    __pyx_t_4 = 1;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_fileno, __pyx_mstate_global->__pyx_int_1};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_io = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":366
 *     hub = get_hub()
 *     io = hub.loop.io(fileno, 1)
 *     try:             # <<<<<<<<<<<<<<
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)
 *     finally:
*/
  /*try:*/ {

    /* "src/gevent/_hub_primitives.py":367
 *     io = hub.loop.io(fileno, 1)
 *     try:
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)             # <<<<<<<<<<<<<<
 *     finally:
 *         io.close()
*/
    __Pyx_XDECREF(__pyx_r);
    if (!(likely(((((PyObject *)__pyx_v_hub)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_hub), __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet))))) __PYX_ERR(0, 367, __pyx_L4_error)
    __pyx_t_5.__pyx_n = 3;
    __pyx_t_5.timeout = __pyx_v_timeout;
    __pyx_t_5.timeout_exc = __pyx_v_timeout_exc;
    __pyx_t_5.hub = ((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_hub);
    __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_watcher(__pyx_v_io, 0, &__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 367, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L3_return;
  }

  /* "src/gevent/_hub_primitives.py":369
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)
 *     finally:
 *         io.close()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
      {
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_io, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
      goto __pyx_L1_error;
      __pyx_L7_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_14 = __pyx_r;
      __pyx_r = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_io, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_r = __pyx_t_14;
      __pyx_t_14 = 0;
      goto __pyx_L0;
    }
  }

  /* "src/gevent/_hub_primitives.py":353
 * 
 * 
 * def wait_read(fileno, timeout=None, timeout_exc=_NONE):             # <<<<<<<<<<<<<<
 *     """
 *     wait_read(fileno, timeout=None, [timeout_exc=None]) -> None
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_read", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_hub);
  __Pyx_XDECREF(__pyx_v_io);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_11wait_read(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_10wait_read, "wait_read(fileno, timeout=None, timeout_exc=_NONE)\nwait_read(fileno, timeout=None, [timeout_exc=None]) -> None\n\nBlock the current greenlet until *fileno* is ready to read.\n\nFor the meaning of the other parameters and possible exceptions,\nsee :func:`wait`.\n\n.. seealso:: :func:`cancel_wait`");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_11wait_read = {"wait_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_11wait_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_10wait_read};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_11wait_read(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_fileno = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_timeout_exc = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wait_read (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_fileno,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_timeout_exc,0};
    values[1] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    values[2] = __Pyx_Arg_NewRef_FASTCALL(__pyx_mstate_global->__pyx_k__3);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_fileno)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 353, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[1]);
            values[1] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 353, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout_exc);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[2]);
            values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 353, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wait_read") < 0)) __PYX_ERR(0, 353, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_fileno = values[0];
    __pyx_v_timeout = values[1];
    __pyx_v_timeout_exc = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait_read", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 353, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_read", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_10wait_read(__pyx_self, __pyx_v_fileno, __pyx_v_timeout, __pyx_v_timeout_exc);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_10wait_read(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fileno, PyObject *__pyx_v_timeout, PyObject *__pyx_v_timeout_exc) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_read __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_read", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.timeout = __pyx_v_timeout;
  __pyx_t_2.timeout_exc = __pyx_v_timeout_exc;
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_wait_read(__pyx_v_fileno, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_read", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":372
 * 
 * 
 * def wait_write(fileno, timeout=None, timeout_exc=_NONE, event=_NONE):             # <<<<<<<<<<<<<<
 *     """
 *     wait_write(fileno, timeout=None, [timeout_exc=None]) -> None
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13wait_write(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_write(PyObject *__pyx_v_fileno, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_write *__pyx_optional_args) {
  PyObject *__pyx_v_timeout = ((PyObject *)Py_None);
  PyObject *__pyx_v_timeout_exc = __pyx_mstate_global->__pyx_k__4;
  struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *__pyx_v_hub = NULL;
  PyObject *__pyx_v_io = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  unsigned int __pyx_t_4;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_watcher __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  char const *__pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_write", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_timeout = __pyx_optional_args->timeout;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_timeout_exc = __pyx_optional_args->timeout_exc;
      }
    }
  }

  /* "src/gevent/_hub_primitives.py":388
 *     """
 *     # pylint:disable=unused-argument
 *     hub = get_hub()             # <<<<<<<<<<<<<<
 *     io = hub.loop.io(fileno, 2)
 *     try:
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_6gevent_19_gevent_c_hub_local_get_hub_noargs(0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_hub = ((struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":389
 *     # pylint:disable=unused-argument
 *     hub = get_hub()
 *     io = hub.loop.io(fileno, 2)             # <<<<<<<<<<<<<<
 *     try:
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_hub->loop, __pyx_mstate_global->__pyx_n_u_io); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_2, function);
    __pyx_t_4 = 1;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_fileno, __pyx_mstate_global->__pyx_int_2};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_io = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":390
 *     hub = get_hub()
 *     io = hub.loop.io(fileno, 2)
 *     try:             # <<<<<<<<<<<<<<
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)
 *     finally:
*/
  /*try:*/ {

    /* "src/gevent/_hub_primitives.py":391
 *     io = hub.loop.io(fileno, 2)
 *     try:
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)             # <<<<<<<<<<<<<<
 *     finally:
 *         io.close()
*/
    __Pyx_XDECREF(__pyx_r);
    if (!(likely(((((PyObject *)__pyx_v_hub)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_hub), __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet))))) __PYX_ERR(0, 391, __pyx_L4_error)
    __pyx_t_5.__pyx_n = 3;
    __pyx_t_5.timeout = __pyx_v_timeout;
    __pyx_t_5.timeout_exc = __pyx_v_timeout_exc;
    __pyx_t_5.hub = ((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_hub);
    __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_watcher(__pyx_v_io, 0, &__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L3_return;
  }

  /* "src/gevent/_hub_primitives.py":393
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)
 *     finally:
 *         io.close()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
      {
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_io, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
      goto __pyx_L1_error;
      __pyx_L7_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_14 = __pyx_r;
      __pyx_r = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_io, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_r = __pyx_t_14;
      __pyx_t_14 = 0;
      goto __pyx_L0;
    }
  }

  /* "src/gevent/_hub_primitives.py":372
 * 
 * 
 * def wait_write(fileno, timeout=None, timeout_exc=_NONE, event=_NONE):             # <<<<<<<<<<<<<<
 *     """
 *     wait_write(fileno, timeout=None, [timeout_exc=None]) -> None
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_hub);
  __Pyx_XDECREF(__pyx_v_io);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13wait_write(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_12wait_write, "wait_write(fileno, timeout=None, timeout_exc=_NONE, event=_NONE)\nwait_write(fileno, timeout=None, [timeout_exc=None]) -> None\n\nBlock the current greenlet until *fileno* is ready to write.\n\nFor the meaning of the other parameters and possible exceptions,\nsee :func:`wait`.\n\n.. deprecated:: 1.1\n   The keyword argument *event* is ignored. Applications should not pass this parameter.\n   In the future, doing so will become an error.\n\n.. seealso:: :func:`cancel_wait`");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_13wait_write = {"wait_write", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_13wait_write, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_12wait_write};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_13wait_write(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_fileno = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_timeout_exc = 0;
  PyObject *__pyx_v_event = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wait_write (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_fileno,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_timeout_exc,&__pyx_mstate_global->__pyx_n_u_event,0};
    values[1] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    values[2] = __Pyx_Arg_NewRef_FASTCALL(__pyx_mstate_global->__pyx_k__4);
    values[3] = __Pyx_Arg_NewRef_FASTCALL(__pyx_mstate_global->__pyx_k__5);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4:
        __Pyx_Arg_XDECREF_FASTCALL(values[3]);
        values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_fileno)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 372, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[1]);
            values[1] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 372, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout_exc);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[2]);
            values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 372, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_event);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[3]);
            values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 372, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wait_write") < 0)) __PYX_ERR(0, 372, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4:
        __Pyx_Arg_XDECREF_FASTCALL(values[3]);
        values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_fileno = values[0];
    __pyx_v_timeout = values[1];
    __pyx_v_timeout_exc = values[2];
    __pyx_v_event = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait_write", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 372, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_12wait_write(__pyx_self, __pyx_v_fileno, __pyx_v_timeout, __pyx_v_timeout_exc, __pyx_v_event);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_12wait_write(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fileno, PyObject *__pyx_v_timeout, PyObject *__pyx_v_timeout_exc, PyObject *__pyx_v_event) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_write __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_write", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.timeout = __pyx_v_timeout;
  __pyx_t_2.timeout_exc = __pyx_v_timeout_exc;
  __pyx_t_2.event = __pyx_v_event;
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_wait_write(__pyx_v_fileno, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":396
 * 
 * 
 * def wait_readwrite(fileno, timeout=None, timeout_exc=_NONE, event=_NONE):             # <<<<<<<<<<<<<<
 *     """
 *     wait_readwrite(fileno, timeout=None, [timeout_exc=None]) -> None
*/

static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_15wait_readwrite(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_readwrite(PyObject *__pyx_v_fileno, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_readwrite *__pyx_optional_args) {
  PyObject *__pyx_v_timeout = ((PyObject *)Py_None);
  PyObject *__pyx_v_timeout_exc = __pyx_mstate_global->__pyx_k__6;
  struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *__pyx_v_hub = NULL;
  PyObject *__pyx_v_io = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  unsigned int __pyx_t_4;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_watcher __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  char const *__pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_readwrite", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_timeout = __pyx_optional_args->timeout;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_timeout_exc = __pyx_optional_args->timeout_exc;
      }
    }
  }

  /* "src/gevent/_hub_primitives.py":413
 *     """
 *     # pylint:disable=unused-argument
 *     hub = get_hub()             # <<<<<<<<<<<<<<
 *     io = hub.loop.io(fileno, 3)
 *     try:
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_6gevent_19_gevent_c_hub_local_get_hub_noargs(0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_hub = ((struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":414
 *     # pylint:disable=unused-argument
 *     hub = get_hub()
 *     io = hub.loop.io(fileno, 3)             # <<<<<<<<<<<<<<
 *     try:
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_hub->loop, __pyx_mstate_global->__pyx_n_u_io); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_2, function);
    __pyx_t_4 = 1;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_fileno, __pyx_mstate_global->__pyx_int_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_io = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/gevent/_hub_primitives.py":415
 *     hub = get_hub()
 *     io = hub.loop.io(fileno, 3)
 *     try:             # <<<<<<<<<<<<<<
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)
 *     finally:
*/
  /*try:*/ {

    /* "src/gevent/_hub_primitives.py":416
 *     io = hub.loop.io(fileno, 3)
 *     try:
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)             # <<<<<<<<<<<<<<
 *     finally:
 *         io.close()
*/
    __Pyx_XDECREF(__pyx_r);
    if (!(likely(((((PyObject *)__pyx_v_hub)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_hub), __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet))))) __PYX_ERR(0, 416, __pyx_L4_error)
    __pyx_t_5.__pyx_n = 3;
    __pyx_t_5.timeout = __pyx_v_timeout;
    __pyx_t_5.timeout_exc = __pyx_v_timeout_exc;
    __pyx_t_5.hub = ((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)__pyx_v_hub);
    __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_watcher(__pyx_v_io, 0, &__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 416, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L3_return;
  }

  /* "src/gevent/_hub_primitives.py":418
 *         return wait_on_watcher(io, timeout, timeout_exc, hub)
 *     finally:
 *         io.close()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
      {
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_io, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 418, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 418, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
      goto __pyx_L1_error;
      __pyx_L7_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_14 = __pyx_r;
      __pyx_r = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_io, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 418, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 418, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_r = __pyx_t_14;
      __pyx_t_14 = 0;
      goto __pyx_L0;
    }
  }

  /* "src/gevent/_hub_primitives.py":396
 * 
 * 
 * def wait_readwrite(fileno, timeout=None, timeout_exc=_NONE, event=_NONE):             # <<<<<<<<<<<<<<
 *     """
 *     wait_readwrite(fileno, timeout=None, [timeout_exc=None]) -> None
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_readwrite", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_hub);
  __Pyx_XDECREF(__pyx_v_io);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_15wait_readwrite(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_14wait_readwrite, "wait_readwrite(fileno, timeout=None, timeout_exc=_NONE, event=_NONE)\nwait_readwrite(fileno, timeout=None, [timeout_exc=None]) -> None\n\nBlock the current greenlet until *fileno* is ready to read or\nwrite.\n\nFor the meaning of the other parameters and possible exceptions,\nsee :func:`wait`.\n\n.. deprecated:: 1.1\n   The keyword argument *event* is ignored. Applications should not pass this parameter.\n   In the future, doing so will become an error.\n\n.. seealso:: :func:`cancel_wait`");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_15wait_readwrite = {"wait_readwrite", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_15wait_readwrite, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_14wait_readwrite};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_15wait_readwrite(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_fileno = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_timeout_exc = 0;
  PyObject *__pyx_v_event = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wait_readwrite (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_fileno,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_timeout_exc,&__pyx_mstate_global->__pyx_n_u_event,0};
    values[1] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    values[2] = __Pyx_Arg_NewRef_FASTCALL(__pyx_mstate_global->__pyx_k__6);
    values[3] = __Pyx_Arg_NewRef_FASTCALL(__pyx_mstate_global->__pyx_k__7);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4:
        __Pyx_Arg_XDECREF_FASTCALL(values[3]);
        values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_fileno)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 396, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[1]);
            values[1] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 396, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_timeout_exc);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[2]);
            values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 396, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_mstate_global->__pyx_n_u_event);
          if (value) {
            __Pyx_Arg_XDECREF_FASTCALL(values[3]);
            values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--;
          }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 396, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wait_readwrite") < 0)) __PYX_ERR(0, 396, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4:
        __Pyx_Arg_XDECREF_FASTCALL(values[3]);
        values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3:
        __Pyx_Arg_XDECREF_FASTCALL(values[2]);
        values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2:
        __Pyx_Arg_XDECREF_FASTCALL(values[1]);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_fileno = values[0];
    __pyx_v_timeout = values[1];
    __pyx_v_timeout_exc = values[2];
    __pyx_v_event = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait_readwrite", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 396, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_readwrite", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_14wait_readwrite(__pyx_self, __pyx_v_fileno, __pyx_v_timeout, __pyx_v_timeout_exc, __pyx_v_event);

  /* function exit code */
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_14wait_readwrite(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fileno, PyObject *__pyx_v_timeout, PyObject *__pyx_v_timeout_exc, PyObject *__pyx_v_event) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_readwrite __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wait_readwrite", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.timeout = __pyx_v_timeout;
  __pyx_t_2.timeout_exc = __pyx_v_timeout_exc;
  __pyx_t_2.event = __pyx_v_event;
  __pyx_t_1 = __pyx_f_6gevent_24_gevent_c_hub_primitives_wait_readwrite(__pyx_v_fileno, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives.wait_readwrite", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/gevent/_hub_primitives.py":421
 * 
 * 
 * def _init():             # <<<<<<<<<<<<<<
 *     greenlet_init() # pylint:disable=undefined-variable
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_17_init(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_6gevent_24_gevent_c_hub_primitives_16_init, "_init()");
static PyMethodDef __pyx_mdef_6gevent_24_gevent_c_hub_primitives_17_init = {"_init", (PyCFunction)__pyx_pw_6gevent_24_gevent_c_hub_primitives_17_init, METH_NOARGS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_16_init};
static PyObject *__pyx_pw_6gevent_24_gevent_c_hub_primitives_17_init(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_init (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_6gevent_24_gevent_c_hub_primitives_16_init(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6gevent_24_gevent_c_hub_primitives_16_init(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_init", 0);

  /* "src/gevent/_hub_primitives.py":422
 * 
 * def _init():
 *     greenlet_init() # pylint:disable=undefined-variable             # <<<<<<<<<<<<<<
 * 
 * _init()
*/
  __pyx_f_6gevent_24_gevent_c_hub_primitives_greenlet_init(); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 422, __pyx_L1_error)

  /* "src/gevent/_hub_primitives.py":421
 * 
 * 
 * def _init():             # <<<<<<<<<<<<<<
 *     greenlet_init() # pylint:disable=undefined-variable
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gevent._gevent_c_hub_primitives._init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* #### Code section: module_exttypes ### */
static struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet __pyx_vtable_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet;

static PyObject *__pyx_tp_new_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *p;
  PyObject *o = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop, tp_new, newfunc)(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop*)__pyx_vtabptr_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet;
  return o;
}

static int __pyx_tp_traverse_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet(PyObject *o, visitproc v, void *a) {
  int e;
  #if !CYTHON_USE_MODULE_STATE
  e = 0;
  if (likely(__pyx_mstate_global->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop)) {
    traverseproc traverse = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop, tp_traverse, traverseproc);
    if (traverse) { e = traverse(o, v, a); }
  } else
  #endif
  { e = __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet); }
  if (e) return e;
  {
    e = __Pyx_call_type_traverse(o, 0, v, a);
    if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet(PyObject *o) {
  #if !CYTHON_USE_MODULE_STATE
  if (likely(__pyx_mstate_global->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop)) {
    inquiry clear = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop, tp_clear, inquiry);
    if (clear) clear(o);
  } else
  #endif
  { __Pyx_call_next_tp_clear(o, __pyx_tp_clear_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet); }
  return 0;
}

static PyMethodDef __pyx_methods_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet[] = {
  {"cancel_waits_close_and_then", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_3cancel_waits_close_and_then, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_2cancel_waits_close_and_then},
  {"_cancel_waits_then", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_5_cancel_waits_then, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_4_cancel_waits_then},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet_slots[] = {
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet},
  {Py_tp_clear, (void *)__pyx_tp_clear_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet},
  {Py_tp_methods, (void *)__pyx_methods_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet},
  {Py_tp_new, (void *)__pyx_tp_new_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet},
  {0, 0},
};
static PyType_Spec __pyx_type_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet_spec = {
  "gevent._gevent_c_hub_primitives.WaitOperationsGreenlet",
  sizeof(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE,
  __pyx_type_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet_slots,
};
#else

static PyTypeObject __pyx_type_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet = {
  PyVarObject_HEAD_INIT(0, 0)
  "gevent._gevent_c_hub_primitives.""WaitOperationsGreenlet", /*tp_name*/
  sizeof(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet), /*tp_basicsize*/
  0, /*tp_itemsize*/
  0, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, /*tp_traverse*/
  __pyx_tp_clear_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6gevent_24_gevent_c_hub_primitives__WaitIterator __pyx_vtable_6gevent_24_gevent_c_hub_primitives__WaitIterator;

static PyObject *__pyx_tp_new_6gevent_24_gevent_c_hub_primitives__WaitIterator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_mstate_global->__pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *)o);
  p->__pyx_vtab = __pyx_vtabptr_6gevent_24_gevent_c_hub_primitives__WaitIterator;
  p->_hub = ((struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *)Py_None); Py_INCREF(Py_None);
  p->_waiter = ((struct __pyx_obj_6gevent_16_gevent_c_waiter_MultipleWaiter *)Py_None); Py_INCREF(Py_None);
  p->_switch = Py_None; Py_INCREF(Py_None);
  p->_timeout = Py_None; Py_INCREF(Py_None);
  p->_objects = Py_None; Py_INCREF(Py_None);
  p->_timer = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6gevent_24_gevent_c_hub_primitives__WaitIterator(PyObject *o) {
  struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *p = (struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6gevent_24_gevent_c_hub_primitives__WaitIterator) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->_hub);
  Py_CLEAR(p->_waiter);
  Py_CLEAR(p->_switch);
  Py_CLEAR(p->_timeout);
  Py_CLEAR(p->_objects);
  Py_CLEAR(p->_timer);
  #if CYTHON_USE_TYPE_SLOTS
  (*Py_TYPE(o)->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
}

static int __pyx_tp_traverse_6gevent_24_gevent_c_hub_primitives__WaitIterator(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *p = (struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->_hub) {
    e = (*v)(((PyObject *)p->_hub), a); if (e) return e;
  }
  if (p->_waiter) {
    e = (*v)(((PyObject *)p->_waiter), a); if (e) return e;
  }
  if (p->_switch) {
    e = (*v)(p->_switch, a); if (e) return e;
  }
  if (p->_timeout) {
    e = (*v)(p->_timeout, a); if (e) return e;
  }
  if (p->_objects) {
    e = (*v)(p->_objects, a); if (e) return e;
  }
  if (p->_timer) {
    e = (*v)(p->_timer, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gevent_24_gevent_c_hub_primitives__WaitIterator(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *p = (struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *)o;
  tmp = ((PyObject*)p->_hub);
  p->_hub = ((struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_waiter);
  p->_waiter = ((struct __pyx_obj_6gevent_16_gevent_c_waiter_MultipleWaiter *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_switch);
  p->_switch = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_timeout);
  p->_timeout = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_objects);
  p->_objects = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_timer);
  p->_timer = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_specialmethod___pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_5__next__(PyObject *self, CYTHON_UNUSED PyObject *arg) {
  PyObject *res = __pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_5__next__(self);
  if (!res && !PyErr_Occurred()) { PyErr_SetNone(PyExc_StopIteration); }
  return res;
}

static PyMethodDef __pyx_methods_6gevent_24_gevent_c_hub_primitives__WaitIterator[] = {
  {"__next__", (PyCFunction)__pyx_specialmethod___pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_5__next__, METH_NOARGS|METH_COEXIST, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6gevent_24_gevent_c_hub_primitives__WaitIterator_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6gevent_24_gevent_c_hub_primitives__WaitIterator},
  {Py_tp_doc, (void *)PyDoc_STR("_WaitIterator(objects, hub, timeout, count)")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6gevent_24_gevent_c_hub_primitives__WaitIterator},
  {Py_tp_clear, (void *)__pyx_tp_clear_6gevent_24_gevent_c_hub_primitives__WaitIterator},
  {Py_tp_iter, (void *)__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_3__iter__},
  {Py_tp_iternext, (void *)__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_5__next__},
  {Py_tp_methods, (void *)__pyx_methods_6gevent_24_gevent_c_hub_primitives__WaitIterator},
  {Py_tp_init, (void *)__pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_1__init__},
  {Py_tp_new, (void *)__pyx_tp_new_6gevent_24_gevent_c_hub_primitives__WaitIterator},
  {0, 0},
};
static PyType_Spec __pyx_type_6gevent_24_gevent_c_hub_primitives__WaitIterator_spec = {
  "gevent._gevent_c_hub_primitives._WaitIterator",
  sizeof(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6gevent_24_gevent_c_hub_primitives__WaitIterator_slots,
};
#else

static PyTypeObject __pyx_type_6gevent_24_gevent_c_hub_primitives__WaitIterator = {
  PyVarObject_HEAD_INIT(0, 0)
  "gevent._gevent_c_hub_primitives.""_WaitIterator", /*tp_name*/
  sizeof(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gevent_24_gevent_c_hub_primitives__WaitIterator, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("_WaitIterator(objects, hub, timeout, count)"), /*tp_doc*/
  __pyx_tp_traverse_6gevent_24_gevent_c_hub_primitives__WaitIterator, /*tp_traverse*/
  __pyx_tp_clear_6gevent_24_gevent_c_hub_primitives__WaitIterator, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_3__iter__, /*tp_iter*/
  __pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_5__next__, /*tp_iternext*/
  __pyx_methods_6gevent_24_gevent_c_hub_primitives__WaitIterator, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  __pyx_pw_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gevent_24_gevent_c_hub_primitives__WaitIterator, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyMethodDef __pyx_methods[] = {
  {0, 0, 0, 0}
};
/* #### Code section: initfunc_declarations ### */
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_CreateCodeObjects(__pyx_mstatetype *__pyx_mstate); /*proto*/
/* #### Code section: init_module ### */

static int __Pyx_modinit_global_init_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
  /*--- Global init code ---*/
  __pyx_v_6gevent_24_gevent_c_hub_primitives_InvalidSwitchError = Py_None; Py_INCREF(Py_None);
  __pyx_v_6gevent_24_gevent_c_hub_primitives__waiter = Py_None; Py_INCREF(Py_None);
  __pyx_v_6gevent_24_gevent_c_hub_primitives__greenlet_primitives = Py_None; Py_INCREF(Py_None);
  __pyx_v_6gevent_24_gevent_c_hub_primitives_traceback = Py_None; Py_INCREF(Py_None);
  __pyx_v_6gevent_24_gevent_c_hub_primitives__timeout_error = Py_None; Py_INCREF(Py_None);
  __pyx_v_6gevent_24_gevent_c_hub_primitives_Timeout = Py_None; Py_INCREF(Py_None);
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_export_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
  /*--- Variable export code ---*/
  if (__Pyx_ExportVoidPtr(__pyx_mstate_global->__pyx_n_u_InvalidSwitchError, (void *)&__pyx_v_6gevent_24_gevent_c_hub_primitives_InvalidSwitchError, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportVoidPtr(__pyx_mstate_global->__pyx_n_u_waiter, (void *)&__pyx_v_6gevent_24_gevent_c_hub_primitives__waiter, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportVoidPtr(__pyx_mstate_global->__pyx_n_u_greenlet_primitives, (void *)&__pyx_v_6gevent_24_gevent_c_hub_primitives__greenlet_primitives, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportVoidPtr(__pyx_mstate_global->__pyx_n_u_traceback, (void *)&__pyx_v_6gevent_24_gevent_c_hub_primitives_traceback, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportVoidPtr(__pyx_mstate_global->__pyx_n_u_timeout_error, (void *)&__pyx_v_6gevent_24_gevent_c_hub_primitives__timeout_error, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportVoidPtr(__pyx_mstate_global->__pyx_n_u_Timeout, (void *)&__pyx_v_6gevent_24_gevent_c_hub_primitives_Timeout, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportVoidPtr(__pyx_mstate_global->__pyx_n_u_greenlet_imported, (void *)&__pyx_v_6gevent_24_gevent_c_hub_primitives__greenlet_imported, "int") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_function_export_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
  /*--- Function export code ---*/
  if (__Pyx_ExportFunction("iwait_on_objects", (void (*)(void))__pyx_f_6gevent_24_gevent_c_hub_primitives_iwait_on_objects, "PyObject *(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_iwait_on_objects *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("wait_on_objects", (void (*)(void))__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_objects, "PyObject *(int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_objects *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("_primitive_wait", (void (*)(void))__pyx_f_6gevent_24_gevent_c_hub_primitives__primitive_wait, "PyObject *(PyObject *, PyObject *, PyObject *, struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("wait_on_watcher", (void (*)(void))__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_watcher, "PyObject *(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_watcher *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("wait_read", (void (*)(void))__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_read, "PyObject *(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_read *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("wait_write", (void (*)(void))__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_write, "PyObject *(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_write *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("wait_readwrite", (void (*)(void))__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_readwrite, "PyObject *(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_readwrite *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("wait_on_socket", (void (*)(void))__pyx_f_6gevent_24_gevent_c_hub_primitives_wait_on_socket, "PyObject *(PyObject *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_wait_on_socket *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_type_init_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
  /*--- Type init code ---*/
  __pyx_t_1 = PyImport_ImportModule("greenlet"); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_greenlet = __Pyx_ImportType_3_1_0a1(__pyx_t_1, "greenlet", "greenlet", sizeof(PyGreenlet), __PYX_GET_STRUCT_ALIGNMENT_3_1_0a1(PyGreenlet),__Pyx_ImportType_CheckSize_Warn_3_1_0a1); if (!__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_greenlet) __PYX_ERR(3, 19, __pyx_L1_error)
  __pyx_t_2 = PyImport_ImportModule("gevent._gevent_c_greenlet_primitives"); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop = __Pyx_ImportType_3_1_0a1(__pyx_t_2, "gevent._gevent_c_greenlet_primitives", "SwitchOutGreenletWithLoop", sizeof(struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop), __PYX_GET_STRUCT_ALIGNMENT_3_1_0a1(struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop),__Pyx_ImportType_CheckSize_Warn_3_1_0a1); if (!__pyx_mstate->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_vtabptr_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop = (struct __pyx_vtabstruct_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop); if (unlikely(!__pyx_vtabptr_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_vtabptr_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet = &__pyx_vtable_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet;
  __pyx_vtable_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet.__pyx_base = *__pyx_vtabptr_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop;
  __pyx_vtable_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet.wait = (PyObject *(*)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *, PyObject *, int __pyx_skip_dispatch))__pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_wait;
  __pyx_vtable_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet.cancel_wait = (PyObject *(*)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *, PyObject *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_cancel_wait *__pyx_optional_args))__pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_cancel_wait;
  __pyx_vtable_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet._cancel_wait = (PyObject *(*)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch))__pyx_f_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet__cancel_wait;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_t_3 = PyTuple_Pack(1, (PyObject *)__pyx_mstate_global->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet_spec, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet)) __PYX_ERR(0, 44, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet_spec, __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet = &__pyx_type_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet;
  #endif
  if (sizeof(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet) != sizeof(PyGreenlet)) {
    if (__Pyx_validate_extern_base(__pyx_mstate_global->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  }
  #if !CYTHON_COMPILING_IN_LIMITED_API
  __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet->tp_dealloc = __pyx_mstate_global->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop->tp_dealloc;
  __pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet->tp_base = __pyx_mstate_global->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop;
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet->tp_dictoffset && __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, __pyx_vtabptr_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_WaitOperationsGreenlet, (PyObject *) __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  __pyx_vtabptr_6gevent_24_gevent_c_hub_primitives__WaitIterator = &__pyx_vtable_6gevent_24_gevent_c_hub_primitives__WaitIterator;
  __pyx_vtable_6gevent_24_gevent_c_hub_primitives__WaitIterator._begin = (PyObject *(*)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *))__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator__begin;
  __pyx_vtable_6gevent_24_gevent_c_hub_primitives__WaitIterator._cleanup = (PyObject *(*)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *))__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator__cleanup;
  __pyx_vtable_6gevent_24_gevent_c_hub_primitives__WaitIterator.__pyx___enter__ = (PyObject *(*)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *, int __pyx_skip_dispatch))__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___enter__;
  __pyx_vtable_6gevent_24_gevent_c_hub_primitives__WaitIterator.__pyx___exit__ = (PyObject *(*)(struct __pyx_obj_6gevent_24_gevent_c_hub_primitives__WaitIterator *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch))__pyx_f_6gevent_24_gevent_c_hub_primitives_13_WaitIterator___exit__;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6gevent_24_gevent_c_hub_primitives__WaitIterator_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator)) __PYX_ERR(0, 131, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6gevent_24_gevent_c_hub_primitives__WaitIterator_spec, __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator) < 0) __PYX_ERR(0, 131, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator = &__pyx_type_6gevent_24_gevent_c_hub_primitives__WaitIterator;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator) < 0) __PYX_ERR(0, 131, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator->tp_dictoffset && __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator, __pyx_vtabptr_6gevent_24_gevent_c_hub_primitives__WaitIterator) < 0) __PYX_ERR(0, 131, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator) < 0) __PYX_ERR(0, 131, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_WaitIterator, (PyObject *) __pyx_mstate->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator) < 0) __PYX_ERR(0, 131, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_type_import_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
  /*--- Type import code ---*/
  __pyx_t_1 = PyImport_ImportModule("greenlet"); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_greenlet = __Pyx_ImportType_3_1_0a1(__pyx_t_1, "greenlet", "greenlet", sizeof(PyGreenlet), __PYX_GET_STRUCT_ALIGNMENT_3_1_0a1(PyGreenlet),__Pyx_ImportType_CheckSize_Warn_3_1_0a1); if (!__pyx_mstate->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_greenlet) __PYX_ERR(1, 12, __pyx_L1_error)
  __pyx_t_2 = PyImport_ImportModule("gevent._gevent_c_greenlet_primitives"); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_TrackedRawGreenlet = __Pyx_ImportType_3_1_0a1(__pyx_t_2, "gevent._gevent_c_greenlet_primitives", "TrackedRawGreenlet", sizeof(struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_TrackedRawGreenlet), __PYX_GET_STRUCT_ALIGNMENT_3_1_0a1(struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_TrackedRawGreenlet),__Pyx_ImportType_CheckSize_Warn_3_1_0a1); if (!__pyx_mstate->__pyx_ptype_6gevent_29_gevent_c_greenlet_primitives_TrackedRawGreenlet) __PYX_ERR(1, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyImport_ImportModule("greenlet"); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate->__pyx_ptype_6gevent_16_gevent_c_waiter_greenlet = __Pyx_ImportType_3_1_0a1(__pyx_t_2, "greenlet", "greenlet", sizeof(PyGreenlet), __PYX_GET_STRUCT_ALIGNMENT_3_1_0a1(PyGreenlet),__Pyx_ImportType_CheckSize_Warn_3_1_0a1); if (!__pyx_mstate->__pyx_ptype_6gevent_16_gevent_c_waiter_greenlet) __PYX_ERR(2, 15, __pyx_L1_error)
  __pyx_t_1 = PyImport_ImportModule("gevent._gevent_c_waiter"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_6gevent_16_gevent_c_waiter_Waiter = __Pyx_ImportType_3_1_0a1(__pyx_t_1, "gevent._gevent_c_waiter", "Waiter", sizeof(struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter), __PYX_GET_STRUCT_ALIGNMENT_3_1_0a1(struct __pyx_obj_6gevent_16_gevent_c_waiter_Waiter),__Pyx_ImportType_CheckSize_Warn_3_1_0a1); if (!__pyx_mstate->__pyx_ptype_6gevent_16_gevent_c_waiter_Waiter) __PYX_ERR(2, 33, __pyx_L1_error)
  __pyx_vtabptr_6gevent_16_gevent_c_waiter_Waiter = (struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_Waiter*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_6gevent_16_gevent_c_waiter_Waiter); if (unlikely(!__pyx_vtabptr_6gevent_16_gevent_c_waiter_Waiter)) __PYX_ERR(2, 33, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_6gevent_16_gevent_c_waiter_MultipleWaiter = __Pyx_ImportType_3_1_0a1(__pyx_t_1, "gevent._gevent_c_waiter", "MultipleWaiter", sizeof(struct __pyx_obj_6gevent_16_gevent_c_waiter_MultipleWaiter), __PYX_GET_STRUCT_ALIGNMENT_3_1_0a1(struct __pyx_obj_6gevent_16_gevent_c_waiter_MultipleWaiter),__Pyx_ImportType_CheckSize_Warn_3_1_0a1); if (!__pyx_mstate->__pyx_ptype_6gevent_16_gevent_c_waiter_MultipleWaiter) __PYX_ERR(2, 45, __pyx_L1_error)
  __pyx_vtabptr_6gevent_16_gevent_c_waiter_MultipleWaiter = (struct __pyx_vtabstruct_6gevent_16_gevent_c_waiter_MultipleWaiter*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_6gevent_16_gevent_c_waiter_MultipleWaiter); if (unlikely(!__pyx_vtabptr_6gevent_16_gevent_c_waiter_MultipleWaiter)) __PYX_ERR(2, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_variable_import_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0);
  /*--- Variable import code ---*/
  __pyx_t_1 = PyImport_ImportModule("gevent._gevent_c_greenlet_primitives"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "get_objects", (void **)&__pyx_vp_6gevent_29_gevent_c_greenlet_primitives_get_objects, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "wref", (void **)&__pyx_vp_6gevent_29_gevent_c_greenlet_primitives_wref, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "BlockingSwitchOutError", (void **)&__pyx_vp_6gevent_29_gevent_c_greenlet_primitives_BlockingSwitchOutError, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "_greenlet_imported", (void **)&__pyx_vp_6gevent_29_gevent_c_greenlet_primitives__greenlet_imported, "int") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "_memoryview", (void **)&__pyx_vp_6gevent_29_gevent_c_greenlet_primitives__memoryview, "PyTypeObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "_buffer", (void **)&__pyx_vp_6gevent_29_gevent_c_greenlet_primitives__buffer, "PyTypeObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("gevent._gevent_c_hub_local"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "_threadlocal", (void **)&__pyx_vp_6gevent_19_gevent_c_hub_local__threadlocal, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("gevent._gevent_c_waiter"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "sys", (void **)&__pyx_vp_6gevent_16_gevent_c_waiter_sys, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "ConcurrentObjectUseError", (void **)&__pyx_vp_6gevent_16_gevent_c_waiter_ConcurrentObjectUseError, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "_greenlet_imported", (void **)&__pyx_vp_6gevent_16_gevent_c_waiter__greenlet_imported, "int") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr_3_1_0a1(__pyx_t_1, "_NONE", (void **)&__pyx_vp_6gevent_16_gevent_c_waiter__NONE, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_function_import_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
  /*--- Function import code ---*/
  __pyx_t_1 = PyImport_ImportModule("gevent._gevent_c_hub_local"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_ImportFunction_3_1_0a1(__pyx_t_1, "get_hub_noargs", (void (**)(void))&__pyx_f_6gevent_19_gevent_c_hub_local_get_hub_noargs, "struct __pyx_obj_6gevent_29_gevent_c_greenlet_primitives_SwitchOutGreenletWithLoop *(int __pyx_skip_dispatch)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}

#if CYTHON_PEP489_MULTI_PHASE_INIT
static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
static int __pyx_pymod_exec__gevent_c_hub_primitives(PyObject* module); /*proto*/
static PyModuleDef_Slot __pyx_moduledef_slots[] = {
  {Py_mod_create, (void*)__pyx_pymod_create},
  {Py_mod_exec, (void*)__pyx_pymod_exec__gevent_c_hub_primitives},
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
  {Py_mod_gil, Py_MOD_GIL_USED},
  #endif
  {0, NULL}
};
#endif

#ifdef __cplusplus
namespace {
  struct PyModuleDef __pyx_moduledef =
  #else
  static struct PyModuleDef __pyx_moduledef =
  #endif
  {
      PyModuleDef_HEAD_INIT,
      "_gevent_c_hub_primitives",
      __pyx_k_A_collection_of_primitives_used, /* m_doc */
    #if CYTHON_PEP489_MULTI_PHASE_INIT
      0, /* m_size */
    #elif CYTHON_USE_MODULE_STATE
      sizeof(__pyx_mstatetype), /* m_size */
    #else
      -1, /* m_size */
    #endif
      __pyx_methods /* m_methods */,
    #if CYTHON_PEP489_MULTI_PHASE_INIT
      __pyx_moduledef_slots, /* m_slots */
    #else
      NULL, /* m_reload */
    #endif
    #if CYTHON_USE_MODULE_STATE
      __pyx_m_traverse, /* m_traverse */
      __pyx_m_clear, /* m_clear */
      NULL /* m_free */
    #else
      NULL, /* m_traverse */
      NULL, /* m_clear */
      NULL /* m_free */
    #endif
  };
  #ifdef __cplusplus
} /* anonymous namespace */
#endif

/* PyModInitFuncType */
#ifndef CYTHON_NO_PYINIT_EXPORT
  #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
#else
  #ifdef __cplusplus
  #define __Pyx_PyMODINIT_FUNC extern "C" PyObject *
  #else
  #define __Pyx_PyMODINIT_FUNC PyObject *
  #endif
#endif

__Pyx_PyMODINIT_FUNC PyInit__gevent_c_hub_primitives(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC PyInit__gevent_c_hub_primitives(void)
#if CYTHON_PEP489_MULTI_PHASE_INIT
{
  if (__Pyx_VersionSanityCheck() < 0) return NULL;
  return PyModuleDef_Init(&__pyx_moduledef);
}
/* ModuleCreationPEP489 */
#include "src/gevent/_generated_include/ModuleCreationPEP489_impl_f2a459b465d2378e12dcf8e57208c217ed3b0ca9663eafc961547560f84c6316.h"

static CYTHON_SMALL_CODE int __pyx_pymod_exec__gevent_c_hub_primitives(PyObject *__pyx_pyinit_module)
#endif
{
  #if !CYTHON_PEP489_MULTI_PHASE_INIT
  if (__Pyx_VersionSanityCheck() < 0) return NULL;
  #endif
  int stringtab_initialized = 0;
  #if CYTHON_USE_MODULE_STATE
  int pystate_addmodule_run = 0;
  #endif
  __pyx_mstatetype *__pyx_mstate = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  unsigned int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  if (__pyx_m) {
    if (__pyx_m == __pyx_pyinit_module) return 0;
    PyErr_SetString(PyExc_RuntimeError, "Module '_gevent_c_hub_primitives' has already been imported. Re-initialisation is not supported.");
    return -1;
  }
  #else
  if (__pyx_m) return __Pyx_NewRef(__pyx_m);
  #endif
  /*--- Module creation code ---*/
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  __pyx_m = __pyx_pyinit_module;
  Py_INCREF(__pyx_m);
  #else
  #if CYTHON_USE_MODULE_STATE
  __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  {
    int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef);
    __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "_gevent_c_hub_primitives" pseudovariable */
    if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
    pystate_addmodule_run = 1;
  }
  #else
  __pyx_m = PyModule_Create(&__pyx_moduledef);
  if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
  PyUnstable_Module_SetGIL(__pyx_m, Py_MOD_GIL_USED);
  #endif
  #endif
  __pyx_mstate = __pyx_mstate_global;
  CYTHON_UNUSED_VAR(__pyx_t_1);
  __pyx_mstate->__pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_mstate->__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_mstate->__pyx_d);
  __pyx_mstate->__pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_mstate->__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_cython_runtime = __Pyx_PyImport_AddModuleRef("cython_runtime"); if (unlikely(!__pyx_mstate->__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_mstate->__pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  /* ImportRefnannyAPI */
  #if CYTHON_REFNANNY
__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
if (!__Pyx_RefNanny) {
  PyErr_Clear();
  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
  if (!__Pyx_RefNanny)
      Py_FatalError("failed to import 'refnanny' module");
}
#endif

__Pyx_RefNannySetupContext("PyInit__gevent_c_hub_primitives", 0);
  if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #ifdef __Pxy_PyFrame_Initialize_Offsets
  __Pxy_PyFrame_Initialize_Offsets();
  #endif
  __pyx_mstate->__pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_mstate->__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_mstate->__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_mstate->__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
  #ifdef __Pyx_CyFunction_USED
  if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_FusedFunction_USED
  if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Coroutine_USED
  if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Generator_USED
  if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_AsyncGen_USED
  if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  /*--- Library function declarations ---*/
  /*--- Initialize various global constants etc. ---*/
  if (__Pyx_InitConstants(__pyx_mstate) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  stringtab_initialized = 1;
  if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__pyx_module_is_main_gevent___gevent_c_hub_primitives) {
    if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_name, __pyx_mstate_global->__pyx_n_u_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  }
  {
    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
    if (!PyDict_GetItemString(modules, "gevent._gevent_c_hub_primitives")) {
      if (unlikely((PyDict_SetItemString(modules, "gevent._gevent_c_hub_primitives", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
    }
  }
  /*--- Builtin init code ---*/
  if (__Pyx_InitCachedBuiltins(__pyx_mstate) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Constants init code ---*/
  if (__Pyx_InitCachedConstants(__pyx_mstate) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_CreateCodeObjects(__pyx_mstate) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Global type/function init code ---*/
  (void)__Pyx_modinit_global_init_code(__pyx_mstate);
  if (unlikely((__Pyx_modinit_variable_export_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_function_export_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_type_init_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_type_import_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_variable_import_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_function_import_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Execution code ---*/

  /* "src/gevent/_hub_primitives.py":14
 * from __future__ import print_function
 * 
 * import traceback             # <<<<<<<<<<<<<<
 * 
 * from gevent.exceptions import InvalidSwitchError
*/
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_mstate_global->__pyx_n_u_traceback, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XGOTREF(__pyx_v_6gevent_24_gevent_c_hub_primitives_traceback);
  __Pyx_DECREF_SET(__pyx_v_6gevent_24_gevent_c_hub_primitives_traceback, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":16
 * import traceback
 * 
 * from gevent.exceptions import InvalidSwitchError             # <<<<<<<<<<<<<<
 * from gevent.exceptions import ConcurrentObjectUseError
 * 
*/
  __pyx_t_2 = __Pyx_PyList_Pack(1, __pyx_mstate_global->__pyx_n_u_InvalidSwitchError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_gevent_exceptions, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidSwitchError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_XGOTREF(__pyx_v_6gevent_24_gevent_c_hub_primitives_InvalidSwitchError);
  __Pyx_DECREF_SET(__pyx_v_6gevent_24_gevent_c_hub_primitives_InvalidSwitchError, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/gevent/_hub_primitives.py":17
 * 
 * from gevent.exceptions import InvalidSwitchError
 * from gevent.exceptions import ConcurrentObjectUseError             # <<<<<<<<<<<<<<
 * 
 * from gevent import _greenlet_primitives
*/
  __pyx_t_3 = __Pyx_PyList_Pack(1, __pyx_mstate_global->__pyx_n_u_ConcurrentObjectUseError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_gevent_exceptions, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ConcurrentObjectUseError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ConcurrentObjectUseError, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":19
 * from gevent.exceptions import ConcurrentObjectUseError
 * 
 * from gevent import _greenlet_primitives             # <<<<<<<<<<<<<<
 * from gevent import _waiter
 * from gevent._util import _NONE
*/
  __pyx_t_2 = __Pyx_PyList_Pack(1, __pyx_mstate_global->__pyx_n_u_greenlet_primitives); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_gevent, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_greenlet_primitives); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_XGOTREF(__pyx_v_6gevent_24_gevent_c_hub_primitives__greenlet_primitives);
  __Pyx_DECREF_SET(__pyx_v_6gevent_24_gevent_c_hub_primitives__greenlet_primitives, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/gevent/_hub_primitives.py":20
 * 
 * from gevent import _greenlet_primitives
 * from gevent import _waiter             # <<<<<<<<<<<<<<
 * from gevent._util import _NONE
 * from gevent._hub_local import get_hub_noargs as get_hub
*/
  __pyx_t_3 = __Pyx_PyList_Pack(1, __pyx_mstate_global->__pyx_n_u_waiter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_gevent, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_waiter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_XGOTREF(__pyx_v_6gevent_24_gevent_c_hub_primitives__waiter);
  __Pyx_DECREF_SET(__pyx_v_6gevent_24_gevent_c_hub_primitives__waiter, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":21
 * from gevent import _greenlet_primitives
 * from gevent import _waiter
 * from gevent._util import _NONE             # <<<<<<<<<<<<<<
 * from gevent._hub_local import get_hub_noargs as get_hub
 * from gevent.timeout import Timeout
*/
  __pyx_t_2 = __Pyx_PyList_Pack(1, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_gevent__util, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NONE, __pyx_t_2) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/gevent/_hub_primitives.py":22
 * from gevent import _waiter
 * from gevent._util import _NONE
 * from gevent._hub_local import get_hub_noargs as get_hub             # <<<<<<<<<<<<<<
 * from gevent.timeout import Timeout
 * 
*/
  __pyx_t_3 = __Pyx_PyList_Pack(1, __pyx_mstate_global->__pyx_n_u_get_hub_noargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_gevent__hub_local, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_get_hub_noargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_get_hub_noargs, __pyx_t_3) < 0) __PYX_ERR(0, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":23
 * from gevent._util import _NONE
 * from gevent._hub_local import get_hub_noargs as get_hub
 * from gevent.timeout import Timeout             # <<<<<<<<<<<<<<
 * 
 * # In Cython, we define these as 'cdef inline' functions. The
*/
  __pyx_t_2 = __Pyx_PyList_Pack(1, __pyx_mstate_global->__pyx_n_u_Timeout); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_gevent_timeout, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Timeout); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_XGOTREF(__pyx_v_6gevent_24_gevent_c_hub_primitives_Timeout);
  __Pyx_DECREF_SET(__pyx_v_6gevent_24_gevent_c_hub_primitives_Timeout, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/gevent/_hub_primitives.py":29
 * # is assignment) without generating a 'lvalue is not valid target'
 * # error.
 * locals()['getcurrent'] = __import__('greenlet').getcurrent             # <<<<<<<<<<<<<<
 * locals()['greenlet_init'] = lambda: None
 * locals()['Waiter'] = _waiter.Waiter
*/
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_mstate_global->__pyx_tuple[1], NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_getcurrent); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_Globals(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (unlikely((PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_getcurrent, __pyx_t_2) < 0))) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":30
 * # error.
 * locals()['getcurrent'] = __import__('greenlet').getcurrent
 * locals()['greenlet_init'] = lambda: None             # <<<<<<<<<<<<<<
 * locals()['Waiter'] = _waiter.Waiter
 * locals()['MultipleWaiter'] = _waiter.MultipleWaiter
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_18lambda, 0, __pyx_mstate_global->__pyx_n_u_lambda, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Globals(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (unlikely((PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_greenlet_init, __pyx_t_2) < 0))) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":31
 * locals()['getcurrent'] = __import__('greenlet').getcurrent
 * locals()['greenlet_init'] = lambda: None
 * locals()['Waiter'] = _waiter.Waiter             # <<<<<<<<<<<<<<
 * locals()['MultipleWaiter'] = _waiter.MultipleWaiter
 * locals()['SwitchOutGreenletWithLoop'] = _greenlet_primitives.SwitchOutGreenletWithLoop
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_6gevent_24_gevent_c_hub_primitives__waiter, __pyx_mstate_global->__pyx_n_u_Waiter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Globals(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (unlikely((PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Waiter, __pyx_t_2) < 0))) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":32
 * locals()['greenlet_init'] = lambda: None
 * locals()['Waiter'] = _waiter.Waiter
 * locals()['MultipleWaiter'] = _waiter.MultipleWaiter             # <<<<<<<<<<<<<<
 * locals()['SwitchOutGreenletWithLoop'] = _greenlet_primitives.SwitchOutGreenletWithLoop
 * 
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_6gevent_24_gevent_c_hub_primitives__waiter, __pyx_mstate_global->__pyx_n_u_MultipleWaiter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Globals(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (unlikely((PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_MultipleWaiter, __pyx_t_2) < 0))) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":33
 * locals()['Waiter'] = _waiter.Waiter
 * locals()['MultipleWaiter'] = _waiter.MultipleWaiter
 * locals()['SwitchOutGreenletWithLoop'] = _greenlet_primitives.SwitchOutGreenletWithLoop             # <<<<<<<<<<<<<<
 * 
 * __all__ = [
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_6gevent_24_gevent_c_hub_primitives__greenlet_primitives, __pyx_mstate_global->__pyx_n_u_SwitchOutGreenletWithLoop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Globals(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (unlikely((PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SwitchOutGreenletWithLoop, __pyx_t_2) < 0))) __PYX_ERR(0, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":35
 * locals()['SwitchOutGreenletWithLoop'] = _greenlet_primitives.SwitchOutGreenletWithLoop
 * 
 * __all__ = [             # <<<<<<<<<<<<<<
 *     'WaitOperationsGreenlet',
 *     'iwait_on_objects',
*/
  __pyx_t_2 = __Pyx_PyList_Pack(6, __pyx_mstate_global->__pyx_n_u_WaitOperationsGreenlet, __pyx_mstate_global->__pyx_n_u_iwait_on_objects, __pyx_mstate_global->__pyx_n_u_wait_on_objects, __pyx_mstate_global->__pyx_n_u_wait_read, __pyx_mstate_global->__pyx_n_u_wait_write, __pyx_mstate_global->__pyx_n_u_wait_readwrite); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_all, __pyx_t_2) < 0) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":46
 * class WaitOperationsGreenlet(SwitchOutGreenletWithLoop): # pylint:disable=undefined-variable
 * 
 *     def wait(self, watcher):             # <<<<<<<<<<<<<<
 *         """
 *         Wait until the *watcher* (which must not be started) is ready.
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_1wait, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_WaitOperationsGreenlet_wait, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[1])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, __pyx_mstate_global->__pyx_n_u_wait, __pyx_t_2) < 0) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":69
 *             watcher.stop()
 * 
 *     def cancel_waits_close_and_then(self, watchers, exc_kind, then, *then_args):             # <<<<<<<<<<<<<<
 *         deferred = []
 *         for watcher in watchers:
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_3cancel_waits_close_and_then, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_WaitOperationsGreenlet_cancel_wa, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, __pyx_mstate_global->__pyx_n_u_cancel_waits_close_and_then, __pyx_t_2) < 0) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":83
 *             then(*then_args)
 * 
 *     def _cancel_waits_then(self, watchers, exc_kind, then, then_args):             # <<<<<<<<<<<<<<
 *         for watcher in watchers:
 *             self._cancel_wait(watcher, exc_kind, True)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_5_cancel_waits_then, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_WaitOperationsGreenlet__cancel_w, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[3])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, __pyx_mstate_global->__pyx_n_u_cancel_waits_then, __pyx_t_2) < 0) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":88
 *         then(*then_args)
 * 
 *     def cancel_wait(self, watcher, error, close_watcher=False):             # <<<<<<<<<<<<<<
 *         """
 *         Cancel an in-progress call to :meth:`wait` by throwing the given *error*
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_7cancel_wait, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_WaitOperationsGreenlet_cancel_wa_2, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[4])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[2]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, __pyx_mstate_global->__pyx_n_u_cancel_wait, __pyx_t_2) < 0) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":113
 *             watcher.close()
 * 
 *     def _cancel_wait(self, watcher, error, close_watcher):             # <<<<<<<<<<<<<<
 *         # Running in the hub. Switches to the waiting greenlet to raise
 *         # the error; assuming the waiting greenlet dies, switches back
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_22WaitOperationsGreenlet_9_cancel_wait, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_WaitOperationsGreenlet__cancel_w_2, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[5])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives_WaitOperationsGreenlet, __pyx_mstate_global->__pyx_n_u_cancel_wait_2, __pyx_t_2) < 0) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":187
 *             raise
 * 
 *     next = __next__             # <<<<<<<<<<<<<<
 * 
 *     def _cleanup(self):
*/
  __Pyx_GetNameInClass(__pyx_t_2, (PyObject*)__pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator, __pyx_mstate_global->__pyx_n_u_next); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator, __pyx_mstate_global->__pyx_n_u_next_2, __pyx_t_2) < 0) __PYX_ERR(0, 187, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":204
 *                     traceback.print_exc()
 * 
 *     def __enter__(self):             # <<<<<<<<<<<<<<
 *         return self
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_7__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_WaitIterator___enter, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_2) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":207
 *         return self
 * 
 *     def __exit__(self, typ, value, tb):             # <<<<<<<<<<<<<<
 *         self._cleanup()
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_13_WaitIterator_9__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_WaitIterator___exit, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_6gevent_24_gevent_c_hub_primitives__WaitIterator, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_2) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":211
 * 
 * 
 * def iwait_on_objects(objects, timeout=None, count=None):             # <<<<<<<<<<<<<<
 *     """
 *     Iteratively yield *objects* as they are ready, until all (or *count*) are ready
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_1iwait_on_objects, 0, __pyx_mstate_global->__pyx_n_u_iwait_on_objects, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[8])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[3]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_iwait_on_objects, __pyx_t_2) < 0) __PYX_ERR(0, 211, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":250
 * 
 * 
 * def wait_on_objects(objects=None, timeout=None, count=None):             # <<<<<<<<<<<<<<
 *     """
 *     Wait for *objects* to become ready or for event loop to finish.
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_3wait_on_objects, 0, __pyx_mstate_global->__pyx_n_u_wait_on_objects, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[9])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 250, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[0]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_wait_on_objects, __pyx_t_2) < 0) __PYX_ERR(0, 250, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":289
 *     return list(iwait_on_objects(objects, timeout, count))
 * 
 * _timeout_error = Exception             # <<<<<<<<<<<<<<
 * 
 * def set_default_timeout_error(e):
*/
  __Pyx_INCREF((PyObject *)(((PyTypeObject*)PyExc_Exception)));
  __Pyx_XGOTREF(__pyx_v_6gevent_24_gevent_c_hub_primitives__timeout_error);
  __Pyx_DECREF_SET(__pyx_v_6gevent_24_gevent_c_hub_primitives__timeout_error, ((PyObject *)(((PyTypeObject*)PyExc_Exception))));
  __Pyx_GIVEREF((PyObject *)(((PyTypeObject*)PyExc_Exception)));

  /* "src/gevent/_hub_primitives.py":291
 * _timeout_error = Exception
 * 
 * def set_default_timeout_error(e):             # <<<<<<<<<<<<<<
 *     global _timeout_error
 *     _timeout_error = e
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_5set_default_timeout_error, 0, __pyx_mstate_global->__pyx_n_u_set_default_timeout_error, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[10])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_set_default_timeout_error, __pyx_t_2) < 0) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":317
 * 
 * # Suitable to be bound as an instance method
 * def wait_on_socket(socket, watcher, timeout_exc=None):             # <<<<<<<<<<<<<<
 *     if socket is None or watcher is None:
 *         # test__hub TestCloseSocketWhilePolling, on Python 2; Python 3
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_7wait_on_socket, 0, __pyx_mstate_global->__pyx_n_u_wait_on_socket, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[11])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[4]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_wait_on_socket, __pyx_t_2) < 0) __PYX_ERR(0, 317, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":326
 *                     socket.hub)
 * 
 * def wait_on_watcher(watcher, timeout=None, timeout_exc=_NONE, hub=None):             # <<<<<<<<<<<<<<
 *     """
 *     wait(watcher, timeout=None, [timeout_exc=None]) -> None
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate_global->__pyx_k__2 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_Pack(3, Py_None, __pyx_t_2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_9wait_on_watcher, 0, __pyx_mstate_global->__pyx_n_u_wait_on_watcher, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[12])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_wait_on_watcher, __pyx_t_2) < 0) __PYX_ERR(0, 326, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":353
 * 
 * 
 * def wait_read(fileno, timeout=None, timeout_exc=_NONE):             # <<<<<<<<<<<<<<
 *     """
 *     wait_read(fileno, timeout=None, [timeout_exc=None]) -> None
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate_global->__pyx_k__3 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_Pack(2, Py_None, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_11wait_read, 0, __pyx_mstate_global->__pyx_n_u_wait_read, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[13])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_wait_read, __pyx_t_2) < 0) __PYX_ERR(0, 353, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":372
 * 
 * 
 * def wait_write(fileno, timeout=None, timeout_exc=_NONE, event=_NONE):             # <<<<<<<<<<<<<<
 *     """
 *     wait_write(fileno, timeout=None, [timeout_exc=None]) -> None
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate_global->__pyx_k__4 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate_global->__pyx_k__5 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_Pack(3, Py_None, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_13wait_write, 0, __pyx_mstate_global->__pyx_n_u_wait_write, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[14])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_wait_write, __pyx_t_3) < 0) __PYX_ERR(0, 372, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/gevent/_hub_primitives.py":396
 * 
 * 
 * def wait_readwrite(fileno, timeout=None, timeout_exc=_NONE, event=_NONE):             # <<<<<<<<<<<<<<
 *     """
 *     wait_readwrite(fileno, timeout=None, [timeout_exc=None]) -> None
*/
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_mstate_global->__pyx_k__6 = __pyx_t_3;
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_mstate_global->__pyx_k__7 = __pyx_t_3;
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_NONE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyTuple_Pack(3, Py_None, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_15wait_readwrite, 0, __pyx_mstate_global->__pyx_n_u_wait_readwrite, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[15])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_wait_readwrite, __pyx_t_4) < 0) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/gevent/_hub_primitives.py":421
 * 
 * 
 * def _init():             # <<<<<<<<<<<<<<
 *     greenlet_init() # pylint:disable=undefined-variable
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gevent_24_gevent_c_hub_primitives_17_init, 0, __pyx_mstate_global->__pyx_n_u_init, NULL, __pyx_mstate_global->__pyx_n_u_gevent__gevent_c_hub_primitives, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[16])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_init, __pyx_t_4) < 0) __PYX_ERR(0, 421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/gevent/_hub_primitives.py":424
 *     greenlet_init() # pylint:disable=undefined-variable
 * 
 * _init()             # <<<<<<<<<<<<<<
 * 
 * from gevent._util import import_c_accel
*/
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/gevent/_hub_primitives.py":426
 * _init()
 * 
 * from gevent._util import import_c_accel             # <<<<<<<<<<<<<<
 * import_c_accel(globals(), 'gevent.__hub_primitives')
*/
  __pyx_t_2 = __Pyx_PyList_Pack(1, __pyx_mstate_global->__pyx_n_u_import_c_accel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_gevent__util, __pyx_t_2, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_import_c_accel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_import_c_accel, __pyx_t_2) < 0) __PYX_ERR(0, 426, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/gevent/_hub_primitives.py":427
 * 
 * from gevent._util import import_c_accel
 * import_c_accel(globals(), 'gevent.__hub_primitives')             # <<<<<<<<<<<<<<
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_import_c_accel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Globals(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_3, __pyx_mstate_global->__pyx_kp_u_gevent___hub_primitives};
    __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 427, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/gevent/_hub_primitives.py":1
 * # -*- coding: utf-8 -*-             # <<<<<<<<<<<<<<
 * # copyright (c) 2018 gevent. See  LICENSE.
 * # cython: auto_pickle=False,embedsignature=True,always_allow_keywords=False,binding=True
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_4) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /*--- Wrapped vars code ---*/

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  if (__pyx_m) {
    if (__pyx_mstate->__pyx_d && stringtab_initialized) {
      __Pyx_AddTraceback("init gevent._gevent_c_hub_primitives", __pyx_clineno, __pyx_lineno, __pyx_filename);
    }
    #if !CYTHON_USE_MODULE_STATE
    Py_CLEAR(__pyx_m);
    #else
    Py_DECREF(__pyx_m);
    if (pystate_addmodule_run) {
      PyObject *tp, *value, *tb;
      PyErr_Fetch(&tp, &value, &tb);
      PyState_RemoveModule(&__pyx_moduledef);
      PyErr_Restore(tp, value, tb);
    }
    #endif
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init gevent._gevent_c_hub_primitives");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  return (__pyx_m != NULL) ? 0 : -1;
  #else
  return __pyx_m;
  #endif
}
/* #### Code section: pystring_table ### */

typedef struct {
    const char *s;
#if 179 <= 65535
    const unsigned short n;
#elif 179 / 2 < INT_MAX
    const unsigned int n;
#elif 179 / 2 < LONG_MAX
    const unsigned long n;
#else
    const Py_ssize_t n;
#endif
#if 1 <= 31
    const unsigned int encoding : 5;
#elif 1 <= 255
    const unsigned char encoding;
#elif 1 <= 65535
    const unsigned short encoding;
#else
    const Py_ssize_t encoding;
#endif
    const unsigned int is_unicode : 1;
    const unsigned int intern : 1;
} __Pyx_StringTabEntry;
static const char * const __pyx_string_tab_encodings[] = { 0 };
static const __Pyx_StringTabEntry __pyx_string_tab[] = {
  {__pyx_k_, sizeof(__pyx_k_), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_ */
  {__pyx_k_ConcurrentObjectUseError, sizeof(__pyx_k_ConcurrentObjectUseError), 0, 1, 1}, /* PyObject cname: __pyx_n_u_ConcurrentObjectUseError */
  {__pyx_k_InvalidSwitchError, sizeof(__pyx_k_InvalidSwitchError), 0, 1, 1}, /* PyObject cname: __pyx_n_u_InvalidSwitchError */
  {__pyx_k_Invalid_switch_into, sizeof(__pyx_k_Invalid_switch_into), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_Invalid_switch_into */
  {__pyx_k_MultipleWaiter, sizeof(__pyx_k_MultipleWaiter), 0, 1, 1}, /* PyObject cname: __pyx_n_u_MultipleWaiter */
  {__pyx_k_NONE, sizeof(__pyx_k_NONE), 0, 1, 1}, /* PyObject cname: __pyx_n_u_NONE */
  {__pyx_k_Note_that_Cython_is_deliberately, sizeof(__pyx_k_Note_that_Cython_is_deliberately), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_Note_that_Cython_is_deliberately */
  {__pyx_k_StopIteration, sizeof(__pyx_k_StopIteration), 0, 1, 1}, /* PyObject cname: __pyx_n_u_StopIteration */
  {__pyx_k_SwitchOutGreenletWithLoop, sizeof(__pyx_k_SwitchOutGreenletWithLoop), 0, 1, 1}, /* PyObject cname: __pyx_n_u_SwitchOutGreenletWithLoop */
  {__pyx_k_The_socket_has_already_been_clos, sizeof(__pyx_k_The_socket_has_already_been_clos), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_The_socket_has_already_been_clos */
  {__pyx_k_This_socket_is_already_used_by_a, sizeof(__pyx_k_This_socket_is_already_used_by_a), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_This_socket_is_already_used_by_a */
  {__pyx_k_Timeout, sizeof(__pyx_k_Timeout), 0, 1, 1}, /* PyObject cname: __pyx_n_u_Timeout */
  {__pyx_k_WaitIterator, sizeof(__pyx_k_WaitIterator), 0, 1, 1}, /* PyObject cname: __pyx_n_u_WaitIterator */
  {__pyx_k_WaitIterator___enter, sizeof(__pyx_k_WaitIterator___enter), 0, 1, 1}, /* PyObject cname: __pyx_n_u_WaitIterator___enter */
  {__pyx_k_WaitIterator___exit, sizeof(__pyx_k_WaitIterator___exit), 0, 1, 1}, /* PyObject cname: __pyx_n_u_WaitIterator___exit */
  {__pyx_k_WaitOperationsGreenlet, sizeof(__pyx_k_WaitOperationsGreenlet), 0, 1, 1}, /* PyObject cname: __pyx_n_u_WaitOperationsGreenlet */
  {__pyx_k_WaitOperationsGreenlet__cancel_w, sizeof(__pyx_k_WaitOperationsGreenlet__cancel_w), 0, 1, 1}, /* PyObject cname: __pyx_n_u_WaitOperationsGreenlet__cancel_w */
  {__pyx_k_WaitOperationsGreenlet__cancel_w_2, sizeof(__pyx_k_WaitOperationsGreenlet__cancel_w_2), 0, 1, 1}, /* PyObject cname: __pyx_n_u_WaitOperationsGreenlet__cancel_w_2 */
  {__pyx_k_WaitOperationsGreenlet_cancel_wa, sizeof(__pyx_k_WaitOperationsGreenlet_cancel_wa), 0, 1, 1}, /* PyObject cname: __pyx_n_u_WaitOperationsGreenlet_cancel_wa */
  {__pyx_k_WaitOperationsGreenlet_cancel_wa_2, sizeof(__pyx_k_WaitOperationsGreenlet_cancel_wa_2), 0, 1, 1}, /* PyObject cname: __pyx_n_u_WaitOperationsGreenlet_cancel_wa_2 */
  {__pyx_k_WaitOperationsGreenlet_wait, sizeof(__pyx_k_WaitOperationsGreenlet_wait), 0, 1, 1}, /* PyObject cname: __pyx_n_u_WaitOperationsGreenlet_wait */
  {__pyx_k_Waiter, sizeof(__pyx_k_Waiter), 0, 1, 1}, /* PyObject cname: __pyx_n_u_Waiter */
  {__pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0}, /* PyObject cname: __pyx_kp_u__8 */
  {__pyx_k__9, sizeof(__pyx_k__9), 0, 1, 0}, /* PyObject cname: __pyx_kp_u__9 */
  {__pyx_k_active, sizeof(__pyx_k_active), 0, 1, 1}, /* PyObject cname: __pyx_n_u_active */
  {__pyx_k_add_note, sizeof(__pyx_k_add_note), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_add_note */
  {__pyx_k_all, sizeof(__pyx_k_all), 0, 1, 1}, /* PyObject cname: __pyx_n_u_all */
  {__pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 1, 1}, /* PyObject cname: __pyx_n_u_asyncio_coroutines */
  {__pyx_k_callback, sizeof(__pyx_k_callback), 0, 1, 1}, /* PyObject cname: __pyx_n_u_callback */
  {__pyx_k_cancel_wait, sizeof(__pyx_k_cancel_wait), 0, 1, 1}, /* PyObject cname: __pyx_n_u_cancel_wait */
  {__pyx_k_cancel_wait_2, sizeof(__pyx_k_cancel_wait_2), 0, 1, 1}, /* PyObject cname: __pyx_n_u_cancel_wait_2 */
  {__pyx_k_cancel_waits_close_and_then, sizeof(__pyx_k_cancel_waits_close_and_then), 0, 1, 1}, /* PyObject cname: __pyx_n_u_cancel_waits_close_and_then */
  {__pyx_k_cancel_waits_then, sizeof(__pyx_k_cancel_waits_then), 0, 1, 1}, /* PyObject cname: __pyx_n_u_cancel_waits_then */
  {__pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 1, 1}, /* PyObject cname: __pyx_n_u_cline_in_traceback */
  {__pyx_k_close, sizeof(__pyx_k_close), 0, 1, 1}, /* PyObject cname: __pyx_n_u_close */
  {__pyx_k_close_watcher, sizeof(__pyx_k_close_watcher), 0, 1, 1}, /* PyObject cname: __pyx_n_u_close_watcher */
  {__pyx_k_count, sizeof(__pyx_k_count), 0, 1, 1}, /* PyObject cname: __pyx_n_u_count */
  {__pyx_k_deferred, sizeof(__pyx_k_deferred), 0, 1, 1}, /* PyObject cname: __pyx_n_u_deferred */
  {__pyx_k_dict, sizeof(__pyx_k_dict), 0, 1, 1}, /* PyObject cname: __pyx_n_u_dict */
  {__pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_disable */
  {__pyx_k_e, sizeof(__pyx_k_e), 0, 1, 1}, /* PyObject cname: __pyx_n_u_e */
  {__pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_enable */
  {__pyx_k_enter, sizeof(__pyx_k_enter), 0, 1, 1}, /* PyObject cname: __pyx_n_u_enter */
  {__pyx_k_error, sizeof(__pyx_k_error), 0, 1, 1}, /* PyObject cname: __pyx_n_u_error */
  {__pyx_k_event, sizeof(__pyx_k_event), 0, 1, 1}, /* PyObject cname: __pyx_n_u_event */
  {__pyx_k_exc_kind, sizeof(__pyx_k_exc_kind), 0, 1, 1}, /* PyObject cname: __pyx_n_u_exc_kind */
  {__pyx_k_exit, sizeof(__pyx_k_exit), 0, 1, 1}, /* PyObject cname: __pyx_n_u_exit */
  {__pyx_k_expected, sizeof(__pyx_k_expected), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_expected */
  {__pyx_k_fileno, sizeof(__pyx_k_fileno), 0, 1, 1}, /* PyObject cname: __pyx_n_u_fileno */
  {__pyx_k_func, sizeof(__pyx_k_func), 0, 1, 1}, /* PyObject cname: __pyx_n_u_func */
  {__pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_gc */
  {__pyx_k_get_hub_noargs, sizeof(__pyx_k_get_hub_noargs), 0, 1, 1}, /* PyObject cname: __pyx_n_u_get_hub_noargs */
  {__pyx_k_getcurrent, sizeof(__pyx_k_getcurrent), 0, 1, 1}, /* PyObject cname: __pyx_n_u_getcurrent */
  {__pyx_k_gevent, sizeof(__pyx_k_gevent), 0, 1, 1}, /* PyObject cname: __pyx_n_u_gevent */
  {__pyx_k_gevent___hub_primitives, sizeof(__pyx_k_gevent___hub_primitives), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_gevent___hub_primitives */
  {__pyx_k_gevent__gevent_c_hub_primitives, sizeof(__pyx_k_gevent__gevent_c_hub_primitives), 0, 1, 1}, /* PyObject cname: __pyx_n_u_gevent__gevent_c_hub_primitives */
  {__pyx_k_gevent__hub_local, sizeof(__pyx_k_gevent__hub_local), 0, 1, 1}, /* PyObject cname: __pyx_n_u_gevent__hub_local */
  {__pyx_k_gevent__util, sizeof(__pyx_k_gevent__util), 0, 1, 1}, /* PyObject cname: __pyx_n_u_gevent__util */
  {__pyx_k_gevent_exceptions, sizeof(__pyx_k_gevent_exceptions), 0, 1, 1}, /* PyObject cname: __pyx_n_u_gevent_exceptions */
  {__pyx_k_gevent_timeout, sizeof(__pyx_k_gevent_timeout), 0, 1, 1}, /* PyObject cname: __pyx_n_u_gevent_timeout */
  {__pyx_k_got, sizeof(__pyx_k_got), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_got */
  {__pyx_k_greenlet, sizeof(__pyx_k_greenlet), 0, 1, 1}, /* PyObject cname: __pyx_n_u_greenlet */
  {__pyx_k_greenlet_imported, sizeof(__pyx_k_greenlet_imported), 0, 1, 1}, /* PyObject cname: __pyx_n_u_greenlet_imported */
  {__pyx_k_greenlet_init, sizeof(__pyx_k_greenlet_init), 0, 1, 1}, /* PyObject cname: __pyx_n_u_greenlet_init */
  {__pyx_k_greenlet_primitives, sizeof(__pyx_k_greenlet_primitives), 0, 1, 1}, /* PyObject cname: __pyx_n_u_greenlet_primitives */
  {__pyx_k_hub, sizeof(__pyx_k_hub), 0, 1, 1}, /* PyObject cname: __pyx_n_u_hub */
  {__pyx_k_import, sizeof(__pyx_k_import), 0, 1, 1}, /* PyObject cname: __pyx_n_u_import */
  {__pyx_k_import_c_accel, sizeof(__pyx_k_import_c_accel), 0, 1, 1}, /* PyObject cname: __pyx_n_u_import_c_accel */
  {__pyx_k_init, sizeof(__pyx_k_init), 0, 1, 1}, /* PyObject cname: __pyx_n_u_init */
  {__pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 1, 1}, /* PyObject cname: __pyx_n_u_initializing */
  {__pyx_k_io, sizeof(__pyx_k_io), 0, 1, 1}, /* PyObject cname: __pyx_n_u_io */
  {__pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 1, 1}, /* PyObject cname: __pyx_n_u_is_coroutine */
  {__pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_isenabled */
  {__pyx_k_iwait_on_objects, sizeof(__pyx_k_iwait_on_objects), 0, 1, 1}, /* PyObject cname: __pyx_n_u_iwait_on_objects */
  {__pyx_k_join, sizeof(__pyx_k_join), 0, 1, 1}, /* PyObject cname: __pyx_n_u_join */
  {__pyx_k_lambda, sizeof(__pyx_k_lambda), 0, 1, 1}, /* PyObject cname: __pyx_n_u_lambda */
  {__pyx_k_main, sizeof(__pyx_k_main), 0, 1, 1}, /* PyObject cname: __pyx_n_u_main */
  {__pyx_k_name, sizeof(__pyx_k_name), 0, 1, 1}, /* PyObject cname: __pyx_n_u_name */
  {__pyx_k_next, sizeof(__pyx_k_next), 0, 1, 1}, /* PyObject cname: __pyx_n_u_next */
  {__pyx_k_next_2, sizeof(__pyx_k_next_2), 0, 1, 1}, /* PyObject cname: __pyx_n_u_next_2 */
  {__pyx_k_objects, sizeof(__pyx_k_objects), 0, 1, 1}, /* PyObject cname: __pyx_n_u_objects */
  {__pyx_k_print_exc, sizeof(__pyx_k_print_exc), 0, 1, 1}, /* PyObject cname: __pyx_n_u_print_exc */
  {__pyx_k_priority, sizeof(__pyx_k_priority), 0, 1, 1}, /* PyObject cname: __pyx_n_u_priority */
  {__pyx_k_pyx_capi, sizeof(__pyx_k_pyx_capi), 0, 1, 1}, /* PyObject cname: __pyx_n_u_pyx_capi */
  {__pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 1, 1}, /* PyObject cname: __pyx_n_u_pyx_vtable */
  {__pyx_k_rawlink, sizeof(__pyx_k_rawlink), 0, 1, 1}, /* PyObject cname: __pyx_n_u_rawlink */
  {__pyx_k_run_callback, sizeof(__pyx_k_run_callback), 0, 1, 1}, /* PyObject cname: __pyx_n_u_run_callback */
  {__pyx_k_self, sizeof(__pyx_k_self), 0, 1, 1}, /* PyObject cname: __pyx_n_u_self */
  {__pyx_k_self_2, sizeof(__pyx_k_self_2), 0, 1, 1}, /* PyObject cname: __pyx_n_u_self_2 */
  {__pyx_k_set_default_timeout_error, sizeof(__pyx_k_set_default_timeout_error), 0, 1, 1}, /* PyObject cname: __pyx_n_u_set_default_timeout_error */
  {__pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 1, 1}, /* PyObject cname: __pyx_n_u_set_name */
  {__pyx_k_socket, sizeof(__pyx_k_socket), 0, 1, 1}, /* PyObject cname: __pyx_n_u_socket */
  {__pyx_k_spec, sizeof(__pyx_k_spec), 0, 1, 1}, /* PyObject cname: __pyx_n_u_spec */
  {__pyx_k_src_gevent__hub_primitives_py, sizeof(__pyx_k_src_gevent__hub_primitives_py), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_src_gevent__hub_primitives_py */
  {__pyx_k_start, sizeof(__pyx_k_start), 0, 1, 1}, /* PyObject cname: __pyx_n_u_start */
  {__pyx_k_start_new_or_dummy, sizeof(__pyx_k_start_new_or_dummy), 0, 1, 1}, /* PyObject cname: __pyx_n_u_start_new_or_dummy */
  {__pyx_k_stop, sizeof(__pyx_k_stop), 0, 1, 1}, /* PyObject cname: __pyx_n_u_stop */
  {__pyx_k_switch, sizeof(__pyx_k_switch), 0, 1, 1}, /* PyObject cname: __pyx_n_u_switch */
  {__pyx_k_tb, sizeof(__pyx_k_tb), 0, 1, 1}, /* PyObject cname: __pyx_n_u_tb */
  {__pyx_k_test, sizeof(__pyx_k_test), 0, 1, 1}, /* PyObject cname: __pyx_n_u_test */
  {__pyx_k_then, sizeof(__pyx_k_then), 0, 1, 1}, /* PyObject cname: __pyx_n_u_then */
  {__pyx_k_then_args, sizeof(__pyx_k_then_args), 0, 1, 1}, /* PyObject cname: __pyx_n_u_then_args */
  {__pyx_k_throw, sizeof(__pyx_k_throw), 0, 1, 1}, /* PyObject cname: __pyx_n_u_throw */
  {__pyx_k_timed_out, sizeof(__pyx_k_timed_out), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_timed_out */
  {__pyx_k_timeout, sizeof(__pyx_k_timeout), 0, 1, 1}, /* PyObject cname: __pyx_n_u_timeout */
  {__pyx_k_timeout_error, sizeof(__pyx_k_timeout_error), 0, 1, 1}, /* PyObject cname: __pyx_n_u_timeout_error */
  {__pyx_k_timeout_exc, sizeof(__pyx_k_timeout_exc), 0, 1, 1}, /* PyObject cname: __pyx_n_u_timeout_exc */
  {__pyx_k_timer, sizeof(__pyx_k_timer), 0, 1, 1}, /* PyObject cname: __pyx_n_u_timer */
  {__pyx_k_traceback, sizeof(__pyx_k_traceback), 0, 1, 1}, /* PyObject cname: __pyx_n_u_traceback */
  {__pyx_k_typ, sizeof(__pyx_k_typ), 0, 1, 1}, /* PyObject cname: __pyx_n_u_typ */
  {__pyx_k_unlink, sizeof(__pyx_k_unlink), 0, 1, 1}, /* PyObject cname: __pyx_n_u_unlink */
  {__pyx_k_value, sizeof(__pyx_k_value), 0, 1, 1}, /* PyObject cname: __pyx_n_u_value */
  {__pyx_k_wait, sizeof(__pyx_k_wait), 0, 1, 1}, /* PyObject cname: __pyx_n_u_wait */
  {__pyx_k_wait_on_objects, sizeof(__pyx_k_wait_on_objects), 0, 1, 1}, /* PyObject cname: __pyx_n_u_wait_on_objects */
  {__pyx_k_wait_on_socket, sizeof(__pyx_k_wait_on_socket), 0, 1, 1}, /* PyObject cname: __pyx_n_u_wait_on_socket */
  {__pyx_k_wait_on_watcher, sizeof(__pyx_k_wait_on_watcher), 0, 1, 1}, /* PyObject cname: __pyx_n_u_wait_on_watcher */
  {__pyx_k_wait_read, sizeof(__pyx_k_wait_read), 0, 1, 1}, /* PyObject cname: __pyx_n_u_wait_read */
  {__pyx_k_wait_readwrite, sizeof(__pyx_k_wait_readwrite), 0, 1, 1}, /* PyObject cname: __pyx_n_u_wait_readwrite */
  {__pyx_k_wait_write, sizeof(__pyx_k_wait_write), 0, 1, 1}, /* PyObject cname: __pyx_n_u_wait_write */
  {__pyx_k_waiter, sizeof(__pyx_k_waiter), 0, 1, 1}, /* PyObject cname: __pyx_n_u_waiter */
  {__pyx_k_waiting_on, sizeof(__pyx_k_waiting_on), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_waiting_on */
  {__pyx_k_watcher, sizeof(__pyx_k_watcher), 0, 1, 1}, /* PyObject cname: __pyx_n_u_watcher */
  {__pyx_k_watchers, sizeof(__pyx_k_watchers), 0, 1, 1}, /* PyObject cname: __pyx_n_u_watchers */
  {__pyx_k_with, sizeof(__pyx_k_with), 0, 1, 0}, /* PyObject cname: __pyx_kp_u_with */
  {0, 0, 0, 0, 0}
};
/* InitStrings.proto */
static int __Pyx_InitStrings(__Pyx_StringTabEntry const *t, PyObject **target, const char* const* encoding_names);

/* #### Code section: cached_builtins ### */

static int __Pyx_InitCachedBuiltins(__pyx_mstatetype *__pyx_mstate) {
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __pyx_builtin___import__ = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_import); if (!__pyx_builtin___import__) __PYX_ERR(0, 29, __pyx_L1_error)
  __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_StopIteration); if (!__pyx_builtin_StopIteration) __PYX_ERR(0, 172, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: cached_constants ### */

static int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);

  /* "src/gevent/_hub_primitives.py":313
 *          else _timeout_error('timed out')))
 * 
 *     with timeout:             # <<<<<<<<<<<<<<
 *         hub.wait(watcher)
 * 
*/
  __pyx_mstate_global->__pyx_tuple[0] = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[0])) __PYX_ERR(0, 313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[0]);

  /* "src/gevent/_hub_primitives.py":29
 * # is assignment) without generating a 'lvalue is not valid target'
 * # error.
 * locals()['getcurrent'] = __import__('greenlet').getcurrent             # <<<<<<<<<<<<<<
 * locals()['greenlet_init'] = lambda: None
 * locals()['Waiter'] = _waiter.Waiter
*/
  __pyx_mstate_global->__pyx_tuple[1] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_n_u_greenlet); if (unlikely(!__pyx_mstate_global->__pyx_tuple[1])) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[1]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[1]);

  /* "src/gevent/_hub_primitives.py":88
 *         then(*then_args)
 * 
 *     def cancel_wait(self, watcher, error, close_watcher=False):             # <<<<<<<<<<<<<<
 *         """
 *         Cancel an in-progress call to :meth:`wait` by throwing the given *error*
*/
  __pyx_mstate_global->__pyx_tuple[2] = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_mstate_global->__pyx_tuple[2])) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[2]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[2]);

  /* "src/gevent/_hub_primitives.py":211
 * 
 * 
 * def iwait_on_objects(objects, timeout=None, count=None):             # <<<<<<<<<<<<<<
 *     """
 *     Iteratively yield *objects* as they are ready, until all (or *count*) are ready
*/
  __pyx_mstate_global->__pyx_tuple[3] = PyTuple_Pack(2, Py_None, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[3])) __PYX_ERR(0, 211, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[3]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[3]);

  /* "src/gevent/_hub_primitives.py":317
 * 
 * # Suitable to be bound as an instance method
 * def wait_on_socket(socket, watcher, timeout_exc=None):             # <<<<<<<<<<<<<<
 *     if socket is None or watcher is None:
 *         # test__hub TestCloseSocketWhilePolling, on Python 2; Python 3
*/
  __pyx_mstate_global->__pyx_tuple[4] = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[4])) __PYX_ERR(0, 317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[4]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[4]);
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}
/* #### Code section: init_constants ### */

static int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate) {
  CYTHON_UNUSED_VAR(__pyx_mstate);
  if (__Pyx_InitStrings(__pyx_string_tab, __pyx_mstate->__pyx_string_tab, __pyx_string_tab_encodings) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  __pyx_mstate->__pyx_int_1 = PyLong_FromLong(1); if (unlikely(!__pyx_mstate->__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_int_2 = PyLong_FromLong(2); if (unlikely(!__pyx_mstate->__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_int_3 = PyLong_FromLong(3); if (unlikely(!__pyx_mstate->__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_int_neg_1 = PyLong_FromLong(-1); if (unlikely(!__pyx_mstate->__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: init_codeobjects ### */
\
        typedef struct {
            unsigned int argcount : 3;
            unsigned int num_posonly_args : 1;
            unsigned int num_kwonly_args : 1;
            unsigned int nlocals : 3;
            unsigned int flags : 10;
            unsigned int first_line : 9;
            unsigned int line_table_length : 11;
        } __Pyx_PyCode_New_function_description;
/* NewCodeObj.proto */
static PyObject* __Pyx_PyCode_New(
        __Pyx_PyCode_New_function_description descr,
        PyObject **varnames,
        PyObject *filename,
        PyObject *funcname,
        const char *line_table,
        PyObject *tuple_dedup_map
);


static int __Pyx_CreateCodeObjects(__pyx_mstatetype *__pyx_mstate) {
  PyObject* tuple_dedup_map = PyDict_New();
  if (unlikely(!tuple_dedup_map)) return -1;
  {
    __Pyx_PyCode_New_function_description descr = {0, 0, 0, 0, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 30, 4};
    PyObject* varnames[] = {0};
    __pyx_mstate_global->__pyx_codeobj_tab[0] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_lambda, __pyx_k_HA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[0])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 46, 84};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_self_2, __pyx_mstate->__pyx_n_u_watcher};
    __pyx_mstate_global->__pyx_codeobj_tab[1] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_wait, __pyx_k_A_q_vQfIQ_V4q_wgQ_5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[1])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {4, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS), 69, 89};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_self_2, __pyx_mstate->__pyx_n_u_watchers, __pyx_mstate->__pyx_n_u_exc_kind, __pyx_mstate->__pyx_n_u_then, __pyx_mstate->__pyx_n_u_then_args, __pyx_mstate->__pyx_n_u_deferred, __pyx_mstate->__pyx_n_u_watcher};
    __pyx_mstate_global->__pyx_codeobj_tab[2] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_cancel_waits_close_and_then, __pyx_k_A_1_Kq_xs_wj_1_vQ_q_1_4_JjPVVW, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[2])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {5, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 83, 29};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_self_2, __pyx_mstate->__pyx_n_u_watchers, __pyx_mstate->__pyx_n_u_exc_kind, __pyx_mstate->__pyx_n_u_then, __pyx_mstate->__pyx_n_u_then_args, __pyx_mstate->__pyx_n_u_watcher};
    __pyx_mstate_global->__pyx_codeobj_tab[3] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_cancel_waits_then, __pyx_k_A_Kq_Qiz_Ba, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[3])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 88, 66};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_self_2, __pyx_mstate->__pyx_n_u_watcher, __pyx_mstate->__pyx_n_u_error, __pyx_mstate->__pyx_n_u_close_watcher};
    __pyx_mstate_global->__pyx_codeobj_tab[4] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_cancel_wait, __pyx_k_8_83a_7_G1_4_iwa_1_6, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[4])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 113, 66};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_self_2, __pyx_mstate->__pyx_n_u_watcher, __pyx_mstate->__pyx_n_u_error, __pyx_mstate->__pyx_n_u_close_watcher};
    __pyx_mstate_global->__pyx_codeobj_tab[5] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_cancel_wait_2, __pyx_k_A_WA_1_6_1_7_4_1_uG1_F_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[5])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 204, 7};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_self_2};
    __pyx_mstate_global->__pyx_codeobj_tab[6] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_enter, __pyx_k_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[6])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 207, 9};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_self_2, __pyx_mstate->__pyx_n_u_typ, __pyx_mstate->__pyx_n_u_value, __pyx_mstate->__pyx_n_u_tb};
    __pyx_mstate_global->__pyx_codeobj_tab[7] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_exit, __pyx_k_A_IQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[7])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 211, 56};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_objects, __pyx_mstate->__pyx_n_u_timeout, __pyx_mstate->__pyx_n_u_count};
    __pyx_mstate_global->__pyx_codeobj_tab[8] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_iwait_on_objects, __pyx_k_l_B_xs_q_5_y, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[8])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 250, 59};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_objects, __pyx_mstate->__pyx_n_u_timeout, __pyx_mstate->__pyx_n_u_count};
    __pyx_mstate_global->__pyx_codeobj_tab[9] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_wait_on_objects, __pyx_k_N_aD_xs_gQ_s_q_4q_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[9])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 291, 10};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_e};
    __pyx_mstate_global->__pyx_codeobj_tab[10] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_set_default_timeout_error, __pyx_k_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[10])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 317, 61};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_socket, __pyx_mstate->__pyx_n_u_watcher, __pyx_mstate->__pyx_n_u_timeout_exc};
    __pyx_mstate_global->__pyx_codeobj_tab[11] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_wait_on_socket, __pyx_k_0_wc_c_A_aq_1IV1_wj, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[11])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 326, 25};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_watcher, __pyx_mstate->__pyx_n_u_timeout, __pyx_mstate->__pyx_n_u_timeout_exc, __pyx_mstate->__pyx_n_u_hub};
    __pyx_mstate_global->__pyx_codeobj_tab[12] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_wait_on_watcher, __pyx_k_7_0_1IYm1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[12])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 353, 57};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_fileno, __pyx_mstate->__pyx_n_u_timeout, __pyx_mstate->__pyx_n_u_timeout_exc};
    __pyx_mstate_global->__pyx_codeobj_tab[13] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_wait_read, __pyx_k_0_E_AXQ_at9M, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[13])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 372, 59};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_fileno, __pyx_mstate->__pyx_n_u_timeout, __pyx_mstate->__pyx_n_u_timeout_exc, __pyx_mstate->__pyx_n_u_event};
    __pyx_mstate_global->__pyx_codeobj_tab[14] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_wait_write, __pyx_k_1_a_E_AXQ_at9M, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[14])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 396, 59};
    PyObject* varnames[] = {__pyx_mstate->__pyx_n_u_fileno, __pyx_mstate->__pyx_n_u_timeout, __pyx_mstate->__pyx_n_u_timeout_exc, __pyx_mstate->__pyx_n_u_event};
    __pyx_mstate_global->__pyx_codeobj_tab[15] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_wait_readwrite, __pyx_k_5_E_AXQ_at9M, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[15])) goto bad;
  }
  {
    __Pyx_PyCode_New_function_description descr = {0, 0, 0, 0, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 421, 7};
    PyObject* varnames[] = {0};
    __pyx_mstate_global->__pyx_codeobj_tab[16] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_gevent__hub_primitives_py, __pyx_mstate->__pyx_n_u_init, __pyx_k__10, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[16])) goto bad;
  }
  Py_DECREF(tuple_dedup_map);
  return 0;
  bad:
  Py_DECREF(tuple_dedup_map);
  return -1;
}
/* #### Code section: init_globals ### */

static int __Pyx_InitGlobals(void) {
  /* CachedMethodType.init */
  #if CYTHON_COMPILING_IN_LIMITED_API
{
    PyObject *typesModule=NULL;
    typesModule = PyImport_ImportModule("types");
    if (typesModule) {
        __pyx_mstate_global->__Pyx_CachedMethodType = PyObject_GetAttrString(typesModule, "MethodType");
        Py_DECREF(typesModule);
    }
} // error handling follows
#endif

if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: cleanup_globals ### */
/* #### Code section: cleanup_module ### */
/* #### Code section: main_method ### */
/* #### Code section: utility_code_pragmas ### */
#ifdef _MSC_VER
#pragma warning( push )
/* Warning 4127: conditional expression is constant
 * Cython uses constant conditional expressions to allow in inline functions to be optimized at
 * compile-time, so this warning is not useful
 */
#pragma warning( disable : 4127 )
#endif



/* #### Code section: utility_code_def ### */

/* --- Runtime support code --- */
/* Refnanny */
#if CYTHON_REFNANNY
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
    PyObject *m = NULL, *p = NULL;
    void *r = NULL;
    m = PyImport_ImportModule(modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, "RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
}
#endif

/* PyErrExceptionMatches */
#include "src/gevent/_generated_include/PyErrExceptionMatches_impl_7b4f377310190df92a521563db80ecc2f42d95506fc867b739186a972ce9c8f6.h"
/* PyErrFetchRestore */
#include "src/gevent/_generated_include/PyErrFetchRestore_impl_83072c493b1583a48ff3aad9f8dc7ade3be268831a2ab8ada440fe395cf916ad.h"
/* PyObjectGetAttrStr */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_getattro))
        return tp->tp_getattro(obj, attr_name);
    return PyObject_GetAttr(obj, attr_name);
}
#endif

/* PyObjectGetAttrStrNoError */
#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1
static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        __Pyx_PyErr_Clear();
}
#endif
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) {
    PyObject *result;
#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
    (void) PyObject_GetOptionalAttr(obj, attr_name, &result);
    return result;
#else
#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) {
        return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1);
    }
#endif
    result = __Pyx_PyObject_GetAttrStr(obj, attr_name);
    if (unlikely(!result)) {
        __Pyx_PyObject_GetAttrStr_ClearAttributeError();
    }
    return result;
#endif
}

/* GetBuiltinName */
static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_mstate_global->__pyx_b, name);
    if (unlikely(!result) && !PyErr_Occurred()) {
        PyErr_Format(PyExc_NameError,
            "name '%U' is not defined", name);
    }
    return result;
}

/* TupleAndListFromArray */
#include "src/gevent/_generated_include/TupleAndListFromArray_impl_1397cebd760e8578e923809fda7bc1eb0014760226109d6a55fb60c903fcce4c.h"
/* BytesEquals */
#include "src/gevent/_generated_include/BytesEquals_impl_d48b3ef06490e9921f32936be4dcafdc3250ac7ef2252e904b8f20e24a665cc0.h"
/* UnicodeEquals */
#include "src/gevent/_generated_include/UnicodeEquals_impl_836cabebedcde255d7b2e14d2d3ec8ae093224d9992c111dd33f6f1ba2aecbef.h"
/* fastcall */
#include "src/gevent/_generated_include/fastcall_impl_4ba1954d762ba4405434b2cb85462e7553f60d64e27a22208460cf1b04e5782c.h"
/* PyDictVersioning */
#include "src/gevent/_generated_include/PyDictVersioning_impl_f179ad268abce9726a76569141f76d5dcd0550225ef9a9e9f73d478d7be0c345.h"
/* PyFunctionFastCall */
#include "src/gevent/_generated_include/PyFunctionFastCall_impl_1f76d2513cc66ce3ab1a1b5f0c1dd8aab349dfc3695b4e6430b746ba47b05c78.h"
/* PyObjectCall */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *result;
    ternaryfunc call = Py_TYPE(func)->tp_call;
    if (unlikely(!call))
        return PyObject_Call(func, arg, kw);
    if (unlikely(Py_EnterRecursiveCall(" while calling a Python object")))
        return NULL;
    result = (*call)(func, arg, kw);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectCallMethO */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
    PyObject *self, *result;
    PyCFunction cfunc;
    cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func);
    self = __Pyx_CyOrPyCFunction_GET_SELF(func);
    if (unlikely(Py_EnterRecursiveCall(" while calling a Python object")))
        return NULL;
    result = cfunc(self, arg);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectFastCall */
#include "src/gevent/_generated_include/PyObjectFastCall_impl_44d952f9011a9e8e414ded012c0b27565400adff68b69e695b0821e0cb7a7e7a.h"
/* PyObjectCallOneArg */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *args[2] = {NULL, arg};
    return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* PyObjectFormatAndDecref */
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f) {
    if (unlikely(!s)) return NULL;
    if (likely(PyUnicode_CheckExact(s))) return s;
    return __Pyx_PyObject_FormatAndDecref(s, f);
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* s, PyObject* f) {
    PyObject *result;
    if (unlikely(!s)) return NULL;
    result = PyObject_Format(s, f);
    Py_DECREF(s);
    return result;
}

/* JoinPyUnicode */
#include "src/gevent/_generated_include/JoinPyUnicode_impl_199e5554049cf0e6f79c238bd653d59e48f3389f2b94c2dd9cad4227096f0038.h"
/* RaiseException */
#include "src/gevent/_generated_include/RaiseException_impl_5214b4470ab1cce407ca930811cfafb701053719a58763807254160af0a39f69.h"
/* PyObjectCallNoArg */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
    PyObject *arg[2] = {NULL, NULL};
    return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* GetException */
#include "src/gevent/_generated_include/GetException_impl_8b71b084a0779d960f39df3e5f4495822f40a5a3898f833e312471b9e8b0a831.h"
/* SwapException */
#include "src/gevent/_generated_include/SwapException_impl_3529c43002b85b6a88333a1994598a58e361312e8462c9c4553bcc16b799892a.h"
/* GetTopmostException */
#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
static _PyErr_StackItem *
__Pyx_PyErr_GetTopmostException(PyThreadState *tstate)
{
    _PyErr_StackItem *exc_info = tstate->exc_info;
    while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) &&
           exc_info->previous_item != NULL)
    {
        exc_info = exc_info->previous_item;
    }
    return exc_info;
}
#endif

/* SaveResetException */
#include "src/gevent/_generated_include/SaveResetException_impl_b3e76ed9bc3819093e52b1558c2bbad485040cdc5a28b71844e50bfc92f51cf0.h"
/* RaiseArgTupleInvalid */
static void __Pyx_RaiseArgtupleInvalid(
    const char* func_name,
    int exact,
    Py_ssize_t num_min,
    Py_ssize_t num_max,
    Py_ssize_t num_found)
{
    Py_ssize_t num_expected;
    const char *more_or_less;
    if (num_found < num_min) {
        num_expected = num_min;
        more_or_less = "at least";
    } else {
        num_expected = num_max;
        more_or_less = "at most";
    }
    if (exact) {
        more_or_less = "exactly";
    }
    PyErr_Format(PyExc_TypeError,
                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
                 func_name, more_or_less, num_expected,
                 (num_expected == 1) ? "" : "s", num_found);
}

/* RaiseDoubleKeywords */
static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
}

/* ParseKeywords */
#include "src/gevent/_generated_include/ParseKeywords_impl_a4aa639a776a47f9e4433c05624c095e9109c4a3d538e59cf9ebf2ac9a3f76a9.h"
/* GetAttr3 */
#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1
static PyObject *__Pyx_GetAttr3Default(PyObject *d) {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        return NULL;
    __Pyx_PyErr_Clear();
    Py_INCREF(d);
    return d;
}
#endif
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
    PyObject *r;
#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
    int res = PyObject_GetOptionalAttr(o, n, &r);
    return (res != 0) ? r : __Pyx_NewRef(d);
#else
  #if CYTHON_USE_TYPE_SLOTS
    if (likely(PyUnicode_Check(n))) {
        r = __Pyx_PyObject_GetAttrStrNoError(o, n);
        if (unlikely(!r) && likely(!PyErr_Occurred())) {
            r = __Pyx_NewRef(d);
        }
        return r;
    }
  #endif
    r = PyObject_GetAttr(o, n);
    return (likely(r)) ? r : __Pyx_GetAttr3Default(d);
#endif
}

/* ExtTypeTest */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    __Pyx_TypeName obj_type_name;
    __Pyx_TypeName type_name;
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (likely(__Pyx_TypeCheck(obj, type)))
        return 1;
    obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj));
    type_name = __Pyx_PyType_GetName(type);
    PyErr_Format(PyExc_TypeError,
                 "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME,
                 obj_type_name, type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    __Pyx_DECREF_TypeName(type_name);
    return 0;
}

/* PyObjectVectorCallKwBuilder */
#include "src/gevent/_generated_include/PyObjectVectorCallKwBuilder_impl_fd859cdb6cbc3b35f6b10f5733f06af41f621c00f218f3658f8b944bf821c5f8.h"
/* GetModuleGlobalName */
#include "src/gevent/_generated_include/GetModuleGlobalName_impl_1df4bc152d701a18d6fb878d3682f2d119179fbad3855980048d79586806f515.h"
/* PyObjectLookupSpecial */
#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) {
    PyObject *res;
    PyTypeObject *tp = Py_TYPE(obj);
    res = _PyType_Lookup(tp, attr_name);
    if (likely(res)) {
        descrgetfunc f = Py_TYPE(res)->tp_descr_get;
        if (!f) {
            Py_INCREF(res);
        } else {
            res = f(res, obj, (PyObject *)tp);
        }
    } else if (with_error) {
        PyErr_SetObject(PyExc_AttributeError, attr_name);
    }
    return res;
}
#endif

/* ArgTypeTest */
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)
{
    __Pyx_TypeName type_name;
    __Pyx_TypeName obj_type_name;
    PyObject *extra_info = __pyx_mstate_global->__pyx_empty_unicode;
    int from_annotation_subclass = 0;
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    else if (!exact) {
        if (likely(__Pyx_TypeCheck(obj, type))) return 1;
    } else if (exact == 2) {
        if (__Pyx_TypeCheck(obj, type)) {
            from_annotation_subclass = 1;
            extra_info = __pyx_mstate_global->__pyx_kp_u_Note_that_Cython_is_deliberately;
        }
    }
    type_name = __Pyx_PyType_GetName(type);
    obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj));
    PyErr_Format(PyExc_TypeError,
        "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME
        ", got " __Pyx_FMT_TYPENAME ")"
#if __PYX_LIMITED_VERSION_HEX < 0x030C0000
        "%s%U"
#endif
        , name, type_name, obj_type_name
#if __PYX_LIMITED_VERSION_HEX < 0x030C0000
        , (from_annotation_subclass ? ". " : ""), extra_info
#endif
        );
#if __PYX_LIMITED_VERSION_HEX >= 0x030C0000
    if (exact == 2 && from_annotation_subclass) {
        PyObject *res;
        PyObject *vargs[2];
        vargs[0] = PyErr_GetRaisedException();
        vargs[1] = extra_info;
        res = PyObject_VectorcallMethod(__pyx_mstate_global->__pyx_kp_u_add_note, vargs, 2, NULL);
        Py_XDECREF(res);
        PyErr_SetRaisedException(vargs[0]);
    }
#endif
    __Pyx_DECREF_TypeName(type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    return 0;
}

/* CallNextTpTraverse */
static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse) {
    PyTypeObject* type = Py_TYPE(obj);
    traverseproc tp_traverse = NULL;
    while (type && __Pyx_PyType_GetSlot(type, tp_traverse, traverseproc) != current_tp_traverse)
        type = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
    while (type && (tp_traverse = __Pyx_PyType_GetSlot(type, tp_traverse, traverseproc)) == current_tp_traverse)
        type = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
    if (type && tp_traverse)
        return tp_traverse(obj, v, a);
    return 0;
}

/* CallTypeTraverse */
#if !CYTHON_USE_TYPE_SPECS || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x03090000)
#else
static int __Pyx_call_type_traverse(PyObject *o, int always_call, visitproc visit, void *arg) {
    #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x03090000
    if (__Pyx_get_runtime_version() < 0x03090000) return 0;
    #endif
    if (!always_call) {
        PyTypeObject *base = __Pyx_PyObject_GetSlot(o, tp_base, PyTypeObject*);
        unsigned long flags = PyType_GetFlags(base);
        if (flags & Py_TPFLAGS_HEAPTYPE) {
            return 0;
        }
    }
    Py_VISIT((PyObject*)Py_TYPE(o));
    return 0;
}
#endif

/* CallNextTpClear */
static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) {
    PyTypeObject* type = Py_TYPE(obj);
    inquiry tp_clear = NULL;
    while (type && __Pyx_PyType_GetSlot(type, tp_clear, inquiry) != current_tp_clear)
        type = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
    while (type && (tp_clear = __Pyx_PyType_GetSlot(type, tp_clear, inquiry)) == current_tp_clear)
        type = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
    if (type && tp_clear)
        tp_clear(obj);
}

/* PyVersionSanityCheck */
#include "src/gevent/_generated_include/PyVersionSanityCheck_impl_a96d00d7dec5115c464bb985ace32c129fed70c025e0f408e6df9818c7e6f03d.h"
/* TypeImport */
#include "src/gevent/_generated_include/TypeImport_impl_47949d674c658f3fb141bc2add3a45825b833e77835e2605d3c06c049b9196bb.h"
/* GetVTable */
static void* __Pyx_GetVtable(PyTypeObject *type) {
    void* ptr;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_mstate_global->__pyx_n_u_pyx_vtable);
#else
    PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_mstate_global->__pyx_n_u_pyx_vtable);
#endif
    if (!ob)
        goto bad;
    ptr = PyCapsule_GetPointer(ob, 0);
    if (!ptr && !PyErr_Occurred())
        PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
    Py_DECREF(ob);
    return ptr;
bad:
    Py_XDECREF(ob);
    return NULL;
}

/* FixUpExtensionType */
#include "src/gevent/_generated_include/FixUpExtensionType_impl_9405e4181e5e34ddb2c4dbb45bb4b87617bfd40339f6a40c7ca72e8db5fb6dc6.h"
/* FormatTypeName */
#if CYTHON_COMPILING_IN_LIMITED_API
static __Pyx_TypeName
__Pyx_PyType_GetName(PyTypeObject* tp)
{
    PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp,
                                               __pyx_mstate_global->__pyx_n_u_name);
    if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) {
        PyErr_Clear();
        Py_XDECREF(name);
        name = __Pyx_NewRef(__pyx_mstate_global->__pyx_kp_u__8);
    }
    return name;
}
#endif

/* ValidateExternBase */
static int __Pyx_validate_extern_base(PyTypeObject *base) {
    Py_ssize_t itemsize;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *py_itemsize;
#endif
#if !CYTHON_COMPILING_IN_LIMITED_API
    itemsize = ((PyTypeObject *)base)->tp_itemsize;
#else
    py_itemsize = PyObject_GetAttrString((PyObject*)base, "__itemsize__");
    if (!py_itemsize)
        return -1;
    itemsize = PyLong_AsSsize_t(py_itemsize);
    Py_DECREF(py_itemsize);
    py_itemsize = 0;
    if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred())
        return -1;
#endif
    if (itemsize) {
        __Pyx_TypeName b_name = __Pyx_PyType_GetName(base);
        PyErr_Format(PyExc_TypeError,
                "inheritance from PyVarObject types like '" __Pyx_FMT_TYPENAME "' not currently supported", b_name);
        __Pyx_DECREF_TypeName(b_name);
        return -1;
    }
    return 0;
}

/* PyObjectGetMethod */
#include "src/gevent/_generated_include/PyObjectGetMethod_impl_d1e599c8ba1c42aa34b3a421abcccd081820b4016f424774cf6bbcaa46bf2055.h"
/* PyObjectCallMethod0 */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
    PyObject *method = NULL, *result = NULL;
    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
    if (likely(is_method)) {
        result = __Pyx_PyObject_CallOneArg(method, obj);
        Py_DECREF(method);
        return result;
    }
    if (unlikely(!method)) goto bad;
    result = __Pyx_PyObject_CallNoArg(method);
    Py_DECREF(method);
bad:
    return result;
}

/* ValidateBasesTuple */
#include "src/gevent/_generated_include/ValidateBasesTuple_impl_8fdc0ec3bd505cda933b7b6b0e4c20fdff31f2d0466c12d9c17e6fc281584ada.h"
/* PyType_Ready */
static int __Pyx_PyType_Ready(PyTypeObject *t) {
#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION)
    (void)__Pyx_PyObject_CallMethod0;
#if CYTHON_USE_TYPE_SPECS
    (void)__Pyx_validate_bases_tuple;
#endif
    return PyType_Ready(t);
#else
    int r;
    PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*);
    if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1))
        return -1;
#if !defined(PYSTON_MAJOR_VERSION)
    {
        int gc_was_enabled;
    #if PY_VERSION_HEX >= 0x030A00b1
        gc_was_enabled = PyGC_Disable();
        (void)__Pyx_PyObject_CallMethod0;
    #else
        PyObject *ret, *py_status;
        PyObject *gc = NULL;
        #if (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) &&\
                !CYTHON_COMPILING_IN_GRAAL
        gc = PyImport_GetModule(__pyx_mstate_global->__pyx_kp_u_gc);
        #endif
        if (unlikely(!gc)) gc = PyImport_Import(__pyx_mstate_global->__pyx_kp_u_gc);
        if (unlikely(!gc)) return -1;
        py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_isenabled);
        if (unlikely(!py_status)) {
            Py_DECREF(gc);
            return -1;
        }
        gc_was_enabled = __Pyx_PyObject_IsTrue(py_status);
        Py_DECREF(py_status);
        if (gc_was_enabled > 0) {
            ret = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_disable);
            if (unlikely(!ret)) {
                Py_DECREF(gc);
                return -1;
            }
            Py_DECREF(ret);
        } else if (unlikely(gc_was_enabled == -1)) {
            Py_DECREF(gc);
            return -1;
        }
    #endif
        t->tp_flags |= Py_TPFLAGS_HEAPTYPE;
#if PY_VERSION_HEX >= 0x030A0000
        t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE;
#endif
#else
        (void)__Pyx_PyObject_CallMethod0;
#endif
    r = PyType_Ready(t);
#if !defined(PYSTON_MAJOR_VERSION)
        t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE;
    #if PY_VERSION_HEX >= 0x030A00b1
        if (gc_was_enabled)
            PyGC_Enable();
    #else
        if (gc_was_enabled) {
            PyObject *tp, *v, *tb;
            PyErr_Fetch(&tp, &v, &tb);
            ret = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_enable);
            if (likely(ret || r == -1)) {
                Py_XDECREF(ret);
                PyErr_Restore(tp, v, tb);
            } else {
                Py_XDECREF(tp);
                Py_XDECREF(v);
                Py_XDECREF(tb);
                r = -1;
            }
        }
        Py_DECREF(gc);
    #endif
    }
#endif
    return r;
#endif
}

/* SetVTable */
static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) {
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
    if (unlikely(!ob))
        goto bad;
#if CYTHON_COMPILING_IN_LIMITED_API
    if (unlikely(PyObject_SetAttr((PyObject *) type, __pyx_mstate_global->__pyx_n_u_pyx_vtable, ob) < 0))
#else
    if (unlikely(PyDict_SetItem(type->tp_dict, __pyx_mstate_global->__pyx_n_u_pyx_vtable, ob) < 0))
#endif
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

/* MergeVTables */
#include "src/gevent/_generated_include/MergeVTables_impl_d6d91d62b903874e511df05707230a20ed06d3149501e81957065eeeeb5fe041.h"
/* Import */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
    PyObject *module = 0;
    PyObject *empty_dict = 0;
    PyObject *empty_list = 0;
    empty_dict = PyDict_New();
    if (unlikely(!empty_dict))
        goto bad;
    if (level == -1) {
        if (strchr(__Pyx_MODULE_NAME, '.') != (0)) {
            module = PyImport_ImportModuleLevelObject(
                name, __pyx_mstate_global->__pyx_d, empty_dict, from_list, 1);
            if (unlikely(!module)) {
                if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError)))
                    goto bad;
                PyErr_Clear();
            }
        }
        level = 0;
    }
    if (!module) {
        module = PyImport_ImportModuleLevelObject(
            name, __pyx_mstate_global->__pyx_d, empty_dict, from_list, level);
    }
bad:
    Py_XDECREF(empty_dict);
    Py_XDECREF(empty_list);
    return module;
}

/* ImportDottedModule */
static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) {
    PyObject *partial_name = NULL, *slice = NULL, *sep = NULL;
    Py_ssize_t size;
    if (unlikely(PyErr_Occurred())) {
        PyErr_Clear();
    }
#if CYTHON_ASSUME_SAFE_SIZE
    size = PyTuple_GET_SIZE(parts_tuple);
#else
    size = PyTuple_Size(parts_tuple);
    if (size < 0) goto bad;
#endif
    if (likely(size == count)) {
        partial_name = name;
    } else {
        slice = PySequence_GetSlice(parts_tuple, 0, count);
        if (unlikely(!slice))
            goto bad;
        sep = PyUnicode_FromStringAndSize(".", 1);
        if (unlikely(!sep))
            goto bad;
        partial_name = PyUnicode_Join(sep, slice);
    }
    PyErr_Format(
        PyExc_ModuleNotFoundError,
        "No module named '%U'", partial_name);
bad:
    Py_XDECREF(sep);
    Py_XDECREF(slice);
    Py_XDECREF(partial_name);
    return NULL;
}
static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) {
    PyObject *imported_module;
#if (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM  < 0x07030400) ||\
        CYTHON_COMPILING_IN_GRAAL
    PyObject *modules = PyImport_GetModuleDict();
    if (unlikely(!modules))
        return NULL;
    imported_module = __Pyx_PyDict_GetItemStr(modules, name);
    Py_XINCREF(imported_module);
#else
    imported_module = PyImport_GetModule(name);
#endif
    return imported_module;
}
static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) {
    Py_ssize_t i, nparts;
#if CYTHON_ASSUME_SAFE_SIZE
    nparts = PyTuple_GET_SIZE(parts_tuple);
#else
    nparts = PyTuple_Size(parts_tuple);
    if (nparts < 0) return NULL;
#endif
    for (i=1; i < nparts && module; i++) {
        PyObject *part, *submodule;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        part = PyTuple_GET_ITEM(parts_tuple, i);
#else
        part = __Pyx_PySequence_ITEM(parts_tuple, i);
        if (!part) return NULL;
#endif
        submodule = __Pyx_PyObject_GetAttrStrNoError(module, part);
#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
        Py_DECREF(part);
#endif
        Py_DECREF(module);
        module = submodule;
    }
    if (unlikely(!module)) {
        return __Pyx__ImportDottedModule_Error(name, parts_tuple, i);
    }
    return module;
}
static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) {
    PyObject *imported_module;
    PyObject *module = __Pyx_Import(name, NULL, 0);
    if (!parts_tuple || unlikely(!module))
        return module;
    imported_module = __Pyx__ImportDottedModule_Lookup(name);
    if (likely(imported_module)) {
        Py_DECREF(module);
        return imported_module;
    }
    PyErr_Clear();
    return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple);
}
static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) {
#if CYTHON_COMPILING_IN_CPYTHON
    PyObject *module = __Pyx__ImportDottedModule_Lookup(name);
    if (likely(module)) {
        PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_mstate_global->__pyx_n_u_spec);
        if (likely(spec)) {
            PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_mstate_global->__pyx_n_u_initializing);
            if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) {
                Py_DECREF(spec);
                spec = NULL;
            }
            Py_XDECREF(unsafe);
        }
        if (likely(!spec)) {
            PyErr_Clear();
            return module;
        }
        Py_DECREF(spec);
        Py_DECREF(module);
    } else if (PyErr_Occurred()) {
        PyErr_Clear();
    }
#endif
    return __Pyx__ImportDottedModule(name, parts_tuple);
}

/* ListPack */
static PyObject *__Pyx_PyList_Pack(Py_ssize_t n, ...) {
    va_list va;
    PyObject *l = PyList_New(n);
    va_start(va, n);
    if (unlikely(!l)) goto end;
    for (Py_ssize_t i=0; i<n; ++i) {
        PyObject *arg = va_arg(va, PyObject*);
        Py_INCREF(arg);
        if (__Pyx_PyList_SET_ITEM(l, i, arg) != (0)) {
            Py_CLEAR(l);
            goto end;
        }
    }
    end:
    va_end(va);
    return l;
}

/* ImportFrom */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
        const char* module_name_str = 0;
        PyObject* module_name = 0;
        PyObject* module_dot = 0;
        PyObject* full_name = 0;
        PyErr_Clear();
        module_name_str = PyModule_GetName(module);
        if (unlikely(!module_name_str)) { goto modbad; }
        module_name = PyUnicode_FromString(module_name_str);
        if (unlikely(!module_name)) { goto modbad; }
        module_dot = PyUnicode_Concat(module_name, __pyx_mstate_global->__pyx_kp_u__9);
        if (unlikely(!module_dot)) { goto modbad; }
        full_name = PyUnicode_Concat(module_dot, name);
        if (unlikely(!full_name)) { goto modbad; }
        #if (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM  < 0x07030400) ||\
                CYTHON_COMPILING_IN_GRAAL
        {
            PyObject *modules = PyImport_GetModuleDict();
            if (unlikely(!modules))
                goto modbad;
            value = PyObject_GetItem(modules, full_name);
        }
        #else
        value = PyImport_GetModule(full_name);
        #endif
      modbad:
        Py_XDECREF(full_name);
        Py_XDECREF(module_dot);
        Py_XDECREF(module_name);
    }
    if (unlikely(!value)) {
        PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
    }
    return value;
}

/* FetchSharedCythonModule */
static PyObject *__Pyx_FetchSharedCythonABIModule(void) {
    return __Pyx_PyImport_AddModuleRef(__PYX_ABI_MODULE_NAME);
}

/* FetchCommonType */
#include "src/gevent/_generated_include/FetchCommonType_impl_cce304c6614fc377dbdfe78a4bcdaf39a7ecd84c87a3fcfdec593c1531139901.h"
/* PyMethodNew */
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
    PyObject *result;
    CYTHON_UNUSED_VAR(typ);
    if (!self)
        return __Pyx_NewRef(func);
    #if __PYX_LIMITED_VERSION_HEX >= 0x030C0000
    {
        PyObject *args[] = {func, self};
        result = PyObject_Vectorcall(__pyx_mstate_global->__Pyx_CachedMethodType, args, 2, NULL);
    }
    #else
    result = PyObject_CallFunctionObjArgs(__pyx_mstate_global->__Pyx_CachedMethodType, func, self, NULL);
    #endif
    return result;
}
#else
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
    CYTHON_UNUSED_VAR(typ);
    if (!self)
        return __Pyx_NewRef(func);
    return PyMethod_New(func, self);
}
#endif

/* PyVectorcallFastCallDict */
#include "src/gevent/_generated_include/PyVectorcallFastCallDict_impl_bbbdc230dee8878fcf73eddf0aa04bd5a0aa74643377c74ed654f41ec06b36f9.h"
/* CythonFunctionShared */
#if CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunctionNoMethod(PyObject *func, void *cfunc) {
    if (__Pyx_CyFunction_Check(func)) {
        return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc;
    } else if (PyCFunction_Check(func)) {
        return PyCFunction_GetFunction(func) == (PyCFunction) cfunc;
    }
    return 0;
}
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) {
    if ((PyObject*)Py_TYPE(func) == __pyx_mstate_global->__Pyx_CachedMethodType) {
        int result;
        PyObject *newFunc = PyObject_GetAttr(func, __pyx_mstate_global->__pyx_n_u_func);
        if (unlikely(!newFunc)) {
            PyErr_Clear(); // It's only an optimization, so don't throw an error
            return 0;
        }
        result = __Pyx__IsSameCyOrCFunctionNoMethod(newFunc, cfunc);
        Py_DECREF(newFunc);
        return result;
    }
    return __Pyx__IsSameCyOrCFunctionNoMethod(func, cfunc);
}
#else
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) {
    if (PyMethod_Check(func)) {
        func = PyMethod_GET_FUNCTION(func);
    }
    return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc;
}
#endif
static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) {
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
    __Pyx_Py_XDECREF_SET(
        __Pyx_CyFunction_GetClassObj(f),
            ((classobj) ? __Pyx_NewRef(classobj) : NULL));
#else
    __Pyx_Py_XDECREF_SET(
        ((PyCMethodObject *) (f))->mm_class,
        (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL));
#endif
}
static PyObject *
__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure)
{
    CYTHON_UNUSED_VAR(closure);
    if (unlikely(op->func_doc == NULL)) {
#if CYTHON_COMPILING_IN_LIMITED_API
        op->func_doc = PyObject_GetAttrString(op->func, "__doc__");
        if (unlikely(!op->func_doc)) return NULL;
#else
        if (((PyCFunctionObject*)op)->m_ml->ml_doc) {
            op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc);
            if (unlikely(op->func_doc == NULL))
                return NULL;
        } else {
            Py_INCREF(Py_None);
            return Py_None;
        }
#endif
    }
    Py_INCREF(op->func_doc);
    return op->func_doc;
}
static int
__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (value == NULL) {
        value = Py_None;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->func_doc, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(op->func_name == NULL)) {
#if CYTHON_COMPILING_IN_LIMITED_API
        op->func_name = PyObject_GetAttrString(op->func, "__name__");
#else
        op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name);
#endif
        if (unlikely(op->func_name == NULL))
            return NULL;
    }
    Py_INCREF(op->func_name);
    return op->func_name;
}
static int
__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__name__ must be set to a string object");
        return -1;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->func_name, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(op->func_qualname);
    return op->func_qualname;
}
static int
__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__qualname__ must be set to a string object");
        return -1;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->func_qualname, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(op->func_dict == NULL)) {
        op->func_dict = PyDict_New();
        if (unlikely(op->func_dict == NULL))
            return NULL;
    }
    Py_INCREF(op->func_dict);
    return op->func_dict;
}
static int
__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(value == NULL)) {
        PyErr_SetString(PyExc_TypeError,
               "function's dictionary may not be deleted");
        return -1;
    }
    if (unlikely(!PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
               "setting function's dictionary to a non-dict");
        return -1;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->func_dict, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(op->func_globals);
    return op->func_globals;
}
static PyObject *
__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(op);
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(Py_None);
    return Py_None;
}
static PyObject *
__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context)
{
    PyObject* result = (op->func_code) ? op->func_code : Py_None;
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
    int result = 0;
    PyObject *res = op->defaults_getter((PyObject *) op);
    if (unlikely(!res))
        return -1;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
    Py_INCREF(op->defaults_tuple);
    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
    Py_INCREF(op->defaults_kwdict);
    #else
    op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0);
    if (unlikely(!op->defaults_tuple)) result = -1;
    else {
        op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1);
        if (unlikely(!op->defaults_kwdict)) result = -1;
    }
    #endif
    Py_DECREF(res);
    return result;
}
static int
__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value) {
        value = Py_None;
    } else if (unlikely(value != Py_None && !PyTuple_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__defaults__ must be set to a tuple object");
        return -1;
    }
    PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not "
                 "currently affect the values used in function calls", 1);
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->defaults_tuple, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) {
    PyObject* result = op->defaults_tuple;
    CYTHON_UNUSED_VAR(context);
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL;
            result = op->defaults_tuple;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value) {
        value = Py_None;
    } else if (unlikely(value != Py_None && !PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__kwdefaults__ must be set to a dict object");
        return -1;
    }
    PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not "
                 "currently affect the values used in function calls", 1);
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) {
    PyObject* result = op->defaults_kwdict;
    CYTHON_UNUSED_VAR(context);
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL;
            result = op->defaults_kwdict;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value || value == Py_None) {
        value = NULL;
    } else if (unlikely(!PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__annotations__ must be set to a dict object");
        return -1;
    }
    Py_XINCREF(value);
    __Pyx_Py_XDECREF_SET(op->func_annotations, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) {
    PyObject* result = op->func_annotations;
    CYTHON_UNUSED_VAR(context);
    if (unlikely(!result)) {
        result = PyDict_New();
        if (unlikely(!result)) return NULL;
        op->func_annotations = result;
    }
    Py_INCREF(result);
    return result;
}
static PyObject *
__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) {
    int is_coroutine;
    CYTHON_UNUSED_VAR(context);
    if (op->func_is_coroutine) {
        return __Pyx_NewRef(op->func_is_coroutine);
    }
    is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE;
    if (is_coroutine) {
        PyObject *module, *fromlist, *marker = __pyx_mstate_global->__pyx_n_u_is_coroutine;
        fromlist = PyList_New(1);
        if (unlikely(!fromlist)) return NULL;
        Py_INCREF(marker);
#if CYTHON_ASSUME_SAFE_MACROS
        PyList_SET_ITEM(fromlist, 0, marker);
#else
        if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) {
            Py_DECREF(marker);
            Py_DECREF(fromlist);
            return NULL;
        }
#endif
        module = PyImport_ImportModuleLevelObject(__pyx_mstate_global->__pyx_n_u_asyncio_coroutines, NULL, NULL, fromlist, 0);
        Py_DECREF(fromlist);
        if (unlikely(!module)) goto ignore;
        op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker);
        Py_DECREF(module);
        if (likely(op->func_is_coroutine)) {
            return __Pyx_NewRef(op->func_is_coroutine);
        }
ignore:
        PyErr_Clear();
    }
    op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine);
    return __Pyx_NewRef(op->func_is_coroutine);
}
static void __Pyx_CyFunction_raise_argument_count_error(__pyx_CyFunctionObject *func, const char* message, Py_ssize_t size) {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *py_name = __Pyx_CyFunction_get_name(func, NULL);
    if (!py_name) return;
    PyErr_Format(PyExc_TypeError,
        "%.200S() %s (%" CYTHON_FORMAT_SSIZE_T "d given)",
        py_name, message, size);
    Py_DECREF(py_name);
#else
    const char* name = ((PyCFunctionObject*)func)->m_ml->ml_name;
    PyErr_Format(PyExc_TypeError,
        "%.200s() %s (%" CYTHON_FORMAT_SSIZE_T "d given)",
        name, message, size);
#endif
}
static void __Pyx_CyFunction_raise_type_error(__pyx_CyFunctionObject *func, const char* message) {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *py_name = __Pyx_CyFunction_get_name(func, NULL);
    if (!py_name) return;
    PyErr_Format(PyExc_TypeError,
        "%.200S() %s",
        py_name, message);
    Py_DECREF(py_name);
#else
    const char* name = ((PyCFunctionObject*)func)->m_ml->ml_name;
    PyErr_Format(PyExc_TypeError,
        "%.200s() %s",
        name, message);
#endif
}
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *
__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) {
    CYTHON_UNUSED_VAR(context);
    return PyObject_GetAttrString(op->func, "__module__");
}
static int
__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    return PyObject_SetAttrString(op->func, "__module__", value);
}
#endif
static PyGetSetDef __pyx_CyFunction_getsets[] = {
    {"func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {"__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {"func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {"__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {"__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
    {"func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
    {"__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
    {"func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {"__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {"func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {"__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {"func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {"__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {"func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {"__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {"__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
    {"__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
    {"_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0},
#if CYTHON_COMPILING_IN_LIMITED_API
    {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0},
#endif
    {0, 0, 0, 0, 0}
};
static PyMemberDef __pyx_CyFunction_members[] = {
#if !CYTHON_COMPILING_IN_LIMITED_API
    {"__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0},
#endif
#if CYTHON_USE_TYPE_SPECS
    {"__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0},
#if CYTHON_METH_FASTCALL
#if CYTHON_BACKPORT_VECTORCALL || CYTHON_COMPILING_IN_LIMITED_API
    {"__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0},
#else
    {"__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0},
#endif
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
    {"__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0},
#else
    {"__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0},
#endif
#endif
    {0, 0, 0,  0, 0}
};
static PyObject *
__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args)
{
    CYTHON_UNUSED_VAR(args);
    Py_INCREF(m->func_qualname);
    return m->func_qualname;
}
static PyMethodDef __pyx_CyFunction_methods[] = {
    {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
    {0, 0, 0, 0}
};
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
#else
#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist)
#endif
static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname,
                                       PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
#if !CYTHON_COMPILING_IN_LIMITED_API
    PyCFunctionObject *cf = (PyCFunctionObject*) op;
#endif
    if (unlikely(op == NULL))
        return NULL;
#if CYTHON_COMPILING_IN_LIMITED_API
    op->func = PyCFunction_NewEx(ml, (PyObject*)op, module);
    if (unlikely(!op->func)) return NULL;
#endif
    op->flags = flags;
    __Pyx_CyFunction_weakreflist(op) = NULL;
#if !CYTHON_COMPILING_IN_LIMITED_API
    cf->m_ml = ml;
    cf->m_self = (PyObject *) op;
#endif
    Py_XINCREF(closure);
    op->func_closure = closure;
#if !CYTHON_COMPILING_IN_LIMITED_API
    Py_XINCREF(module);
    cf->m_module = module;
#endif
    op->func_dict = NULL;
    op->func_name = NULL;
    Py_INCREF(qualname);
    op->func_qualname = qualname;
    op->func_doc = NULL;
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
    op->func_classobj = NULL;
#else
    ((PyCMethodObject*)op)->mm_class = NULL;
#endif
    op->func_globals = globals;
    Py_INCREF(op->func_globals);
    Py_XINCREF(code);
    op->func_code = code;
    op->defaults = NULL;
    op->defaults_tuple = NULL;
    op->defaults_kwdict = NULL;
    op->defaults_getter = NULL;
    op->func_annotations = NULL;
    op->func_is_coroutine = NULL;
#if CYTHON_METH_FASTCALL
    switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) {
    case METH_NOARGS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS;
        break;
    case METH_O:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O;
        break;
    case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD;
        break;
    case METH_FASTCALL | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS;
        break;
    case METH_VARARGS | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = NULL;
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction");
        Py_DECREF(op);
        return NULL;
    }
#endif
    return (PyObject *) op;
}
static int
__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
{
    Py_CLEAR(m->func_closure);
#if CYTHON_COMPILING_IN_LIMITED_API
    Py_CLEAR(m->func);
#else
    Py_CLEAR(((PyCFunctionObject*)m)->m_module);
#endif
    Py_CLEAR(m->func_dict);
    Py_CLEAR(m->func_name);
    Py_CLEAR(m->func_qualname);
    Py_CLEAR(m->func_doc);
    Py_CLEAR(m->func_globals);
    Py_CLEAR(m->func_code);
#if !CYTHON_COMPILING_IN_LIMITED_API
#if PY_VERSION_HEX < 0x030900B1
    Py_CLEAR(__Pyx_CyFunction_GetClassObj(m));
#else
    {
        PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class;
        ((PyCMethodObject *) (m))->mm_class = NULL;
        Py_XDECREF(cls);
    }
#endif
#endif
    Py_CLEAR(m->defaults_tuple);
    Py_CLEAR(m->defaults_kwdict);
    Py_CLEAR(m->func_annotations);
    Py_CLEAR(m->func_is_coroutine);
    Py_CLEAR(m->defaults);
    return 0;
}
static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    if (__Pyx_CyFunction_weakreflist(m) != NULL)
        PyObject_ClearWeakRefs((PyObject *) m);
    __Pyx_CyFunction_clear(m);
    __Pyx_PyHeapTypeObject_GC_Del(m);
}
static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    PyObject_GC_UnTrack(m);
    __Pyx__CyFunction_dealloc(m);
}
static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
{
    {
        int e = __Pyx_call_type_traverse((PyObject*)m, 1, visit, arg);
        if (e) return e;
    }
    Py_VISIT(m->func_closure);
#if CYTHON_COMPILING_IN_LIMITED_API
    Py_VISIT(m->func);
#else
    Py_VISIT(((PyCFunctionObject*)m)->m_module);
#endif
    Py_VISIT(m->func_dict);
    __Pyx_VISIT_CONST(m->func_name);
    __Pyx_VISIT_CONST(m->func_qualname);
    Py_VISIT(m->func_doc);
    Py_VISIT(m->func_globals);
    __Pyx_VISIT_CONST(m->func_code);
#if !CYTHON_COMPILING_IN_LIMITED_API
    Py_VISIT(__Pyx_CyFunction_GetClassObj(m));
#endif
    Py_VISIT(m->defaults_tuple);
    Py_VISIT(m->defaults_kwdict);
    Py_VISIT(m->func_is_coroutine);
    Py_VISIT(m->defaults);
    return 0;
}
static PyObject*
__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
{
    return PyUnicode_FromFormat("<cyfunction %U at %p>",
                                op->func_qualname, (void *)op);
}
static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *f = ((__pyx_CyFunctionObject*)func)->func;
    PyCFunction meth;
    int flags;
    meth = PyCFunction_GetFunction(f);
    if (unlikely(!meth)) return NULL;
    flags = PyCFunction_GetFlags(f);
    if (unlikely(flags < 0)) return NULL;
#else
    PyCFunctionObject* f = (PyCFunctionObject*)func;
    PyCFunction meth = f->m_ml->ml_meth;
    int flags = f->m_ml->ml_flags;
#endif
    Py_ssize_t size;
    switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) {
    case METH_VARARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0))
            return (*meth)(self, arg);
        break;
    case METH_VARARGS | METH_KEYWORDS:
        return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw);
    case METH_NOARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
#if CYTHON_ASSUME_SAFE_SIZE
            size = PyTuple_GET_SIZE(arg);
#else
            size = PyTuple_Size(arg);
            if (unlikely(size < 0)) return NULL;
#endif
            if (likely(size == 0))
                return (*meth)(self, NULL);
            __Pyx_CyFunction_raise_argument_count_error(
                (__pyx_CyFunctionObject*)func,
                "takes no arguments", size);
            return NULL;
        }
        break;
    case METH_O:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
#if CYTHON_ASSUME_SAFE_SIZE
            size = PyTuple_GET_SIZE(arg);
#else
            size = PyTuple_Size(arg);
            if (unlikely(size < 0)) return NULL;
#endif
            if (likely(size == 1)) {
                PyObject *result, *arg0;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                arg0 = PyTuple_GET_ITEM(arg, 0);
                #else
                arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL;
                #endif
                result = (*meth)(self, arg0);
                #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
                Py_DECREF(arg0);
                #endif
                return result;
            }
            __Pyx_CyFunction_raise_argument_count_error(
                (__pyx_CyFunctionObject*)func,
                "takes exactly one argument", size);
            return NULL;
        }
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction");
        return NULL;
    }
    __Pyx_CyFunction_raise_type_error(
        (__pyx_CyFunctionObject*)func, "takes no keyword arguments");
    return NULL;
}
static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *self, *result;
#if CYTHON_COMPILING_IN_LIMITED_API
    self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func);
    if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
    self = ((PyCFunctionObject*)func)->m_self;
#endif
    result = __Pyx_CyFunction_CallMethod(func, self, arg, kw);
    return result;
}
static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) {
    PyObject *result;
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
#if CYTHON_METH_FASTCALL && (CYTHON_VECTORCALL || CYTHON_BACKPORT_VECTORCALL)
     __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc);
    if (vc) {
#if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE
        return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw);
#else
        (void) &__Pyx_PyVectorcall_FastCallDict;
        return PyVectorcall_Call(func, args, kw);
#endif
    }
#endif
    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
        Py_ssize_t argc;
        PyObject *new_args;
        PyObject *self;
#if CYTHON_ASSUME_SAFE_SIZE
        argc = PyTuple_GET_SIZE(args);
#else
        argc = PyTuple_Size(args);
        if (unlikely(argc < 0)) return NULL;
#endif
        new_args = PyTuple_GetSlice(args, 1, argc);
        if (unlikely(!new_args))
            return NULL;
        self = PyTuple_GetItem(args, 0);
        if (unlikely(!self)) {
            Py_DECREF(new_args);
            PyErr_Format(PyExc_TypeError,
                         "unbound method %.200S() needs an argument",
                         cyfunc->func_qualname);
            return NULL;
        }
        result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
        Py_DECREF(new_args);
    } else {
        result = __Pyx_CyFunction_Call(func, args, kw);
    }
    return result;
}
#if CYTHON_METH_FASTCALL && (CYTHON_VECTORCALL || CYTHON_BACKPORT_VECTORCALL)
static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames)
{
    int ret = 0;
    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
        if (unlikely(nargs < 1)) {
            __Pyx_CyFunction_raise_type_error(
                cyfunc, "needs an argument");
            return -1;
        }
        ret = 1;
    }
    if (unlikely(kwnames) && unlikely(__Pyx_PyTuple_GET_SIZE(kwnames))) {
        __Pyx_CyFunction_raise_type_error(
            cyfunc, "takes no keyword arguments");
        return -1;
    }
    return ret;
}
static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
#if CYTHON_BACKPORT_VECTORCALL
    Py_ssize_t nargs = (Py_ssize_t)nargsf;
#else
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
#endif
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    if (unlikely(nargs != 0)) {
        __Pyx_CyFunction_raise_argument_count_error(
            cyfunc, "takes no arguments", nargs);
        return NULL;
    }
    return meth(self, NULL);
}
static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
#if CYTHON_BACKPORT_VECTORCALL
    Py_ssize_t nargs = (Py_ssize_t)nargsf;
#else
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
#endif
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    if (unlikely(nargs != 1)) {
        __Pyx_CyFunction_raise_argument_count_error(
            cyfunc, "takes exactly one argument", nargs);
        return NULL;
    }
    return meth(self, args[0]);
}
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
#if CYTHON_BACKPORT_VECTORCALL
    Py_ssize_t nargs = (Py_ssize_t)nargsf;
#else
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
#endif
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))meth)(self, args, nargs, kwnames);
}
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc);
#if CYTHON_BACKPORT_VECTORCALL
    Py_ssize_t nargs = (Py_ssize_t)nargsf;
#else
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
#endif
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    return ((__Pyx_PyCMethod)(void(*)(void))meth)(self, cls, args, (size_t)nargs, kwnames);
}
#endif
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_CyFunctionType_slots[] = {
    {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc},
    {Py_tp_repr, (void *)__Pyx_CyFunction_repr},
    {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod},
    {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse},
    {Py_tp_clear, (void *)__Pyx_CyFunction_clear},
    {Py_tp_methods, (void *)__pyx_CyFunction_methods},
    {Py_tp_members, (void *)__pyx_CyFunction_members},
    {Py_tp_getset, (void *)__pyx_CyFunction_getsets},
    {Py_tp_descr_get, (void *)__Pyx_PyMethod_New},
    {0, 0},
};
static PyType_Spec __pyx_CyFunctionType_spec = {
    __PYX_TYPE_MODULE_PREFIX "cython_function_or_method",
    sizeof(__pyx_CyFunctionObject),
    0,
#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR
    Py_TPFLAGS_METHOD_DESCRIPTOR |
#endif
#if CYTHON_METH_FASTCALL
#if defined(Py_TPFLAGS_HAVE_VECTORCALL)
    Py_TPFLAGS_HAVE_VECTORCALL |
#elif defined(_Py_TPFLAGS_HAVE_VECTORCALL)
    _Py_TPFLAGS_HAVE_VECTORCALL |
#endif
#endif // CYTHON_METH_FASTCALL
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
    __pyx_CyFunctionType_slots
};
#else
static PyTypeObject __pyx_CyFunctionType_type = {
    PyVarObject_HEAD_INIT(0, 0)
    __PYX_TYPE_MODULE_PREFIX "cython_function_or_method",
    sizeof(__pyx_CyFunctionObject),
    0,
    (destructor) __Pyx_CyFunction_dealloc,
#if !CYTHON_METH_FASTCALL
    0,
#elif CYTHON_BACKPORT_VECTORCALL
    (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall),
#else
    offsetof(PyCFunctionObject, vectorcall),
#endif
    0,
    0,
    0,
    (reprfunc) __Pyx_CyFunction_repr,
    0,
    0,
    0,
    0,
    __Pyx_CyFunction_CallAsMethod,
    0,
    0,
    0,
    0,
#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR
    Py_TPFLAGS_METHOD_DESCRIPTOR |
#endif
#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL
    _Py_TPFLAGS_HAVE_VECTORCALL |
#endif
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
    0,
    (traverseproc) __Pyx_CyFunction_traverse,
    (inquiry) __Pyx_CyFunction_clear,
    0,
    offsetof(PyCFunctionObject, m_weakreflist),
    0,
    0,
    __pyx_CyFunction_methods,
    __pyx_CyFunction_members,
    __pyx_CyFunction_getsets,
    0,
    0,
    __Pyx_PyMethod_New,
    0,
    offsetof(__pyx_CyFunctionObject, func_dict),
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
    0,
#endif
#if __PYX_NEED_TP_PRINT_SLOT
    0,
#endif
#if PY_VERSION_HEX >= 0x030C0000
    0,
#endif
#if PY_VERSION_HEX >= 0x030d00A4
    0,
#endif
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
    0,
#endif
};
#endif
static int __pyx_CyFunction_init(PyObject *module) {
    __pyx_mstatetype *mstate = __Pyx_PyModule_GetState(module);
#if CYTHON_USE_TYPE_SPECS
    mstate->__pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL);
#else
    mstate->__pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
#endif
    if (unlikely(mstate->__pyx_CyFunctionType == NULL)) {
        return -1;
    }
    return 0;
}
static CYTHON_INLINE PyObject *__Pyx_CyFunction_InitDefaults(PyObject *func, PyTypeObject *defaults_type) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults = PyObject_CallObject((PyObject*)defaults_type, NULL); // _PyObject_New(defaults_type);
    if (unlikely(!m->defaults))
        return NULL;
    return m->defaults;
}
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults_tuple = tuple;
    Py_INCREF(tuple);
}
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults_kwdict = dict;
    Py_INCREF(dict);
}
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->func_annotations = dict;
    Py_INCREF(dict);
}

/* CythonFunction */
static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname,
                                      PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
    PyObject *op = __Pyx_CyFunction_Init(
        PyObject_GC_New(__pyx_CyFunctionObject, __pyx_mstate_global->__pyx_CyFunctionType),
        ml, flags, qualname, closure, module, globals, code
    );
    if (likely(op)) {
        PyObject_GC_Track(op);
    }
    return op;
}

/* LimitedApiGetTypeDict */
#include "src/gevent/_generated_include/LimitedApiGetTypeDict_impl_fd5385b0b7d81c54e35b8e8be86f2a48fa376c140ad1a251d94cb50d5e2fb049.h"
/* SetItemOnTypeDict */
static int __Pyx__SetItemOnTypeDict(PyTypeObject *tp, PyObject *k, PyObject *v) {
    int result;
    PyObject *tp_dict;
#if CYTHON_COMPILING_IN_LIMITED_API
    tp_dict = __Pyx_GetTypeDict(tp);
    if (unlikely(!tp_dict)) return -1;
#else
    tp_dict = tp->tp_dict;
#endif
    result = PyDict_SetItem(tp_dict, k, v);
    if (likely(!result)) {
        PyType_Modified(tp);
        if (unlikely(PyObject_HasAttr(v, __pyx_mstate_global->__pyx_n_u_set_name))) {
            PyObject *setNameResult = PyObject_CallMethodObjArgs(v, __pyx_mstate_global->__pyx_n_u_set_name,  (PyObject *) tp, k, NULL);
            if (!setNameResult) return -1;
            Py_DECREF(setNameResult);
        }
    }
    return result;
}

/* GetNameInClass */
static PyObject *__Pyx__GetNameInClass(PyObject *nmspace, PyObject *name) {
    PyObject *result;
    PyObject *dict;
    assert(PyType_Check(nmspace));
#if CYTHON_USE_TYPE_SLOTS
    dict = ((PyTypeObject*)nmspace)->tp_dict;
    Py_XINCREF(dict);
#else
    dict = PyObject_GetAttr(nmspace, __pyx_mstate_global->__pyx_n_u_dict);
#endif
    if (likely(dict)) {
        result = PyObject_GetItem(dict, name);
        Py_DECREF(dict);
        if (result) {
            return result;
        }
    }
    PyErr_Clear();
    __Pyx_GetModuleGlobalNameUncached(result, name);
    return result;
}

/* GetAttr */
static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
#if CYTHON_USE_TYPE_SLOTS
    if (likely(PyUnicode_Check(n)))
        return __Pyx_PyObject_GetAttrStr(o, n);
#endif
    return PyObject_GetAttr(o, n);
}

/* Globals */
static PyObject* __Pyx_Globals(void) {
    return __Pyx_NewRef(__pyx_mstate_global->__pyx_d);
}

/* CLineInTraceback */
#if CYTHON_CLINE_IN_TRACEBACK && CYTHON_CLINE_IN_TRACEBACK_RUNTIME
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
    PyObject *use_cline;
    PyObject *ptype, *pvalue, *ptraceback;
#if CYTHON_COMPILING_IN_CPYTHON
    PyObject **cython_runtime_dict;
#endif
    CYTHON_MAYBE_UNUSED_VAR(tstate);
    if (unlikely(!__pyx_mstate_global->__pyx_cython_runtime)) {
        return c_line;
    }
    __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
#if CYTHON_COMPILING_IN_CPYTHON
    cython_runtime_dict = _PyObject_GetDictPtr(__pyx_mstate_global->__pyx_cython_runtime);
    if (likely(cython_runtime_dict)) {
        __PYX_PY_DICT_LOOKUP_IF_MODIFIED(
            use_cline, *cython_runtime_dict,
            __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_mstate_global->__pyx_n_u_cline_in_traceback))
    } else
#endif
    {
      PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_mstate_global->__pyx_cython_runtime, __pyx_mstate_global->__pyx_n_u_cline_in_traceback);
      if (use_cline_obj) {
        use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True;
        Py_DECREF(use_cline_obj);
      } else {
        PyErr_Clear();
        use_cline = NULL;
      }
    }
    if (!use_cline) {
        c_line = 0;
        (void) PyObject_SetAttr(__pyx_mstate_global->__pyx_cython_runtime, __pyx_mstate_global->__pyx_n_u_cline_in_traceback, Py_False);
    }
    else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
        c_line = 0;
    }
    __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
    return c_line;
}
#endif

/* CodeObjectCache */
#include "src/gevent/_generated_include/CodeObjectCache_impl_8e56314cab714547333c49d919e96580a0ad2c2313ab6c848e12552522e75bbb.h"
/* AddTraceback */
#include "src/gevent/_generated_include/AddTraceback_impl_6b5599c8f38c3b0f2df3611c3aa069d267b73cc64527ab8f46b68715f69d4079.h"
/* CIntToPy */
#include "src/gevent/_generated_include/CIntToPy_impl_736a53b70ffeaa1bc338ff1a5f8ee7b61484e9aa566fe5e2274dc7f6887c8c19.h"
/* CIntFromPyVerify */
#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
    {\
        func_type value = func_value;\
        if (sizeof(target_type) < sizeof(func_type)) {\
            if (unlikely(value != (func_type) (target_type) value)) {\
                func_type zero = 0;\
                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
                    return (target_type) -1;\
                if (is_unsigned && unlikely(value < zero))\
                    goto raise_neg_overflow;\
                else\
                    goto raise_overflow;\
            }\
        }\
        return (target_type) value;\
    }

/* CIntFromPy */
#include "src/gevent/_generated_include/CIntFromPy_impl_a10370c2a6150a63cbd54d7313684dbb07b73ce96281053297f0fe857b75e48e.h"
/* CIntFromPy */
#include "src/gevent/_generated_include/CIntFromPy_impl_36f246a43bb776fcc8c37ba1863074887f54181a5a9694bfaa0f140a353756d3.h"
/* FastTypeChecks */
#include "src/gevent/_generated_include/FastTypeChecks_impl_f9d18941833a215bcf3276e2b6a57d81e032bd85ed1fb021b834da49989898c9.h"
/* GetRuntimeVersion */
static unsigned long __Pyx_get_runtime_version(void) {
#if __PYX_LIMITED_VERSION_HEX >= 0x030B00A4
    return Py_Version & ~0xFFUL;
#else
    static unsigned long __Pyx_cached_runtime_version = 0;
    if (__Pyx_cached_runtime_version == 0) {
        const char* rt_version = Py_GetVersion();
        unsigned long version = 0;
        unsigned long factor = 0x01000000UL;
        unsigned int digit = 0;
        int i = 0;
        while (factor) {
            while ('0' <= rt_version[i] && rt_version[i] <= '9') {
                digit = digit * 10 + (unsigned int) (rt_version[i] - '0');
                ++i;
            }
            version += factor * digit;
            if (rt_version[i] != '.')
                break;
            digit = 0;
            factor >>= 8;
            ++i;
        }
        __Pyx_cached_runtime_version = version;
    }
    return __Pyx_cached_runtime_version;
#endif
}

/* CheckBinaryVersion */
static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) {
    const unsigned long MAJOR_MINOR = 0xFFFF0000UL;
    if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR))
        return 0;
    if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR)))
        return 1;
    {
        char message[200];
        PyOS_snprintf(message, sizeof(message),
                      "compile time Python version %d.%d "
                      "of module '%.100s' "
                      "%s "
                      "runtime version %d.%d",
                       (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF),
                       __Pyx_MODULE_NAME,
                       (allow_newer) ? "was newer than" : "does not match",
                       (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF)
       );
        return PyErr_WarnEx(NULL, message, 1);
    }
}

/* PyObjectSetAttrStr */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_setattro))
        return tp->tp_setattro(obj, attr_name, value);
    return PyObject_SetAttr(obj, attr_name, value);
}
#endif

/* VoidPtrExport */
static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig) {
    PyObject *d;
    PyObject *cobj = 0;
    d = PyDict_GetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_capi);
    Py_XINCREF(d);
    if (!d) {
        d = PyDict_New();
        if (!d)
            goto bad;
        if (__Pyx_PyObject_SetAttrStr(__pyx_m, __pyx_mstate_global->__pyx_n_u_pyx_capi, d) < 0)
            goto bad;
    }
    cobj = PyCapsule_New(p, sig, 0);
    if (!cobj)
        goto bad;
    if (PyDict_SetItem(d, name, cobj) < 0)
        goto bad;
    Py_DECREF(cobj);
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(cobj);
    Py_XDECREF(d);
    return -1;
}

/* CFuncPtrToPy */
static void __Pyx_destroy_c_func_ptr_capsule(PyObject *capsule) {
    void* ptr = PyCapsule_GetPointer(capsule, PyCapsule_GetName(capsule));
    PyMem_Free(ptr);
}
static PyObject *__Pyx_c_func_ptr_to_capsule(__Pyx_generic_func_pointer_3_1_0a1 funcptr, const char* name) {
#if defined(__Pyx_TEST_large_func_pointers) && __Pyx_TEST_large_func_pointers
    if ((1))
#else
    if (sizeof(funcptr) > sizeof(void*))
#endif
    {
        __Pyx_generic_func_pointer_3_1_0a1 *copy_into = (__Pyx_generic_func_pointer_3_1_0a1*) PyMem_Malloc(sizeof(funcptr));
        *copy_into = funcptr;
        return PyCapsule_New(copy_into, name, __Pyx_destroy_c_func_ptr_capsule);
    } else {
        void *copy_into;
        memcpy((void*)&copy_into, (void*)&funcptr, sizeof(funcptr));
        return PyCapsule_New(copy_into, name, NULL);
    }
}

/* FunctionExport */
static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    d = PyObject_GetAttrString(__pyx_m, "__pyx_capi__");
    if (!d) {
        PyErr_Clear();
        d = PyDict_New();
        if (!d)
            goto bad;
        Py_INCREF(d);
        if (PyModule_AddObject(__pyx_m, "__pyx_capi__", d) < 0)
            goto bad;
    }
    cobj = __Pyx_c_func_ptr_to_capsule(f, sig);
    if (!cobj)
        goto bad;
    if (PyDict_SetItemString(d, name, cobj) < 0)
        goto bad;
    Py_DECREF(cobj);
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(cobj);
    Py_XDECREF(d);
    return -1;
}

/* VoidPtrImport */
#ifndef __PYX_HAVE_RT_ImportVoidPtr_3_1_0a1
#define __PYX_HAVE_RT_ImportVoidPtr_3_1_0a1
static int __Pyx_ImportVoidPtr_3_1_0a1(PyObject *module, const char *name, void **p, const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    d = PyObject_GetAttrString(module, "__pyx_capi__");
    if (!d)
        goto bad;
    cobj = PyDict_GetItemString(d, name);
    if (!cobj) {
        PyErr_Format(PyExc_ImportError,
            "%.200s does not export expected C variable %.200s",
                PyModule_GetName(module), name);
        goto bad;
    }
    if (!PyCapsule_IsValid(cobj, sig)) {
        PyErr_Format(PyExc_TypeError,
            "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), name, sig, PyCapsule_GetName(cobj));
        goto bad;
    }
    *p = PyCapsule_GetPointer(cobj, sig);
    if (!(*p))
        goto bad;
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(d);
    return -1;
}
#endif

/* FunctionImport */
#include "src/gevent/_generated_include/FunctionImport_impl_d119cfef113bf8b3df2c57c8b949a863cd5a31e99b7fa34a280bf9243517b55a.h"
/* NewCodeObj */
#include "src/gevent/_generated_include/NewCodeObj_impl_9bb39745eb6869534f70b70e725f8f740927a7696f4b520a11980597a2357c28.h"
/* InitStrings */
static int __Pyx_InitStrings(__Pyx_StringTabEntry const *t, PyObject **target, const char* const* encoding_names) {
    while (t->s) {
        PyObject *str;
        if (t->is_unicode) {
            if (t->intern) {
                str = PyUnicode_InternFromString(t->s);
            } else if (t->encoding) {
                str = PyUnicode_Decode(t->s, t->n - 1, encoding_names[t->encoding], NULL);
            } else {
                str = PyUnicode_FromStringAndSize(t->s, t->n - 1);
            }
        } else {
            str = PyBytes_FromStringAndSize(t->s, t->n - 1);
        }
        if (!str)
            return -1;
        *target = str;
        if (PyObject_Hash(str) == -1)
            return -1;
        ++t;
        ++target;
    }
    return 0;
}

#include <string.h>
static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) {
    size_t len = strlen(s);
    if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) {
        PyErr_SetString(PyExc_OverflowError, "byte string is too long");
        return -1;
    }
    return (Py_ssize_t) len;
}
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
    Py_ssize_t len = __Pyx_ssize_strlen(c_str);
    if (unlikely(len < 0)) return NULL;
    return __Pyx_PyUnicode_FromStringAndSize(c_str, len);
}
static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) {
    Py_ssize_t len = __Pyx_ssize_strlen(c_str);
    if (unlikely(len < 0)) return NULL;
    return PyByteArray_FromStringAndSize(c_str, len);
}
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
    Py_ssize_t ignore;
    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
}
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_UTF8
static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
    if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
#if CYTHON_COMPILING_IN_LIMITED_API
    {
        const char* result;
        Py_ssize_t unicode_length;
        CYTHON_MAYBE_UNUSED_VAR(unicode_length); // only for __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        #if __PYX_LIMITED_VERSION_HEX < 0x030A0000
        if (unlikely(PyArg_Parse(o, "s#", &result, length) < 0)) return NULL;
        #else
        result = PyUnicode_AsUTF8AndSize(o, length);
        #endif
        #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        unicode_length = PyUnicode_GetLength(o);
        if (unlikely(unicode_length < 0)) return NULL;
        if (unlikely(unicode_length != *length)) {
            PyUnicode_AsASCIIString(o);
            return NULL;
        }
        #endif
        return result;
    }
#else
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
    if (likely(PyUnicode_IS_ASCII(o))) {
        *length = PyUnicode_GET_LENGTH(o);
        return PyUnicode_AsUTF8(o);
    } else {
        PyUnicode_AsASCIIString(o);
        return NULL;
    }
#else
    return PyUnicode_AsUTF8AndSize(o, length);
#endif
#endif
}
#endif
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_UTF8
    if (PyUnicode_Check(o)) {
        return __Pyx_PyUnicode_AsStringAndSize(o, length);
    } else
#endif
#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
    if (PyByteArray_Check(o)) {
        *length = PyByteArray_GET_SIZE(o);
        return PyByteArray_AS_STRING(o);
    } else
#endif
    {
        char* result;
        int r = PyBytes_AsStringAndSize(o, &result, length);
        if (unlikely(r < 0)) {
            return NULL;
        } else {
            return result;
        }
    }
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
   int is_true = x == Py_True;
   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
   else return PyObject_IsTrue(x);
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
    int retval;
    if (unlikely(!x)) return -1;
    retval = __Pyx_PyObject_IsTrue(x);
    Py_DECREF(x);
    return retval;
}
static PyObject* __Pyx_PyNumber_LongWrongResultType(PyObject* result) {
    __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result));
    if (PyLong_Check(result)) {
        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
                "__int__ returned non-int (type " __Pyx_FMT_TYPENAME ").  "
                "The ability to return an instance of a strict subclass of int is deprecated, "
                "and may be removed in a future version of Python.",
                result_type_name)) {
            __Pyx_DECREF_TypeName(result_type_name);
            Py_DECREF(result);
            return NULL;
        }
        __Pyx_DECREF_TypeName(result_type_name);
        return result;
    }
    PyErr_Format(PyExc_TypeError,
                 "__int__ returned non-int (type " __Pyx_FMT_TYPENAME ")",
                 result_type_name);
    __Pyx_DECREF_TypeName(result_type_name);
    Py_DECREF(result);
    return NULL;
}
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Long(PyObject* x) {
#if CYTHON_USE_TYPE_SLOTS
  PyNumberMethods *m;
#endif
  PyObject *res = NULL;
  if (likely(PyLong_Check(x)))
      return __Pyx_NewRef(x);
#if CYTHON_USE_TYPE_SLOTS
  m = Py_TYPE(x)->tp_as_number;
  if (likely(m && m->nb_int)) {
      res = m->nb_int(x);
  }
#else
  if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
      res = PyNumber_Long(x);
  }
#endif
  if (likely(res)) {
      if (unlikely(!PyLong_CheckExact(res))) {
          return __Pyx_PyNumber_LongWrongResultType(res);
      }
  }
  else if (!PyErr_Occurred()) {
      PyErr_SetString(PyExc_TypeError,
                      "an integer is required");
  }
  return res;
}
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
  Py_ssize_t ival;
  PyObject *x;
  if (likely(PyLong_CheckExact(b))) {
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(__Pyx_PyLong_IsCompact(b))) {
        return __Pyx_PyLong_CompactValue(b);
    } else {
      const digit* digits = __Pyx_PyLong_Digits(b);
      const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b);
      switch (size) {
         case 2:
           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -2:
           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case 3:
           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -3:
           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case 4:
           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -4:
           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
      }
    }
    #endif
    return PyLong_AsSsize_t(b);
  }
  x = PyNumber_Index(b);
  if (!x) return -1;
  ival = PyLong_AsSsize_t(x);
  Py_DECREF(x);
  return ival;
}
static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
  if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
    return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
  } else {
    Py_ssize_t ival;
    PyObject *x;
    x = PyNumber_Index(o);
    if (!x) return -1;
    ival = PyLong_AsLong(x);
    Py_DECREF(x);
    return ival;
  }
}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
  return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
}
static CYTHON_INLINE PyObject * __Pyx_PyLong_FromSize_t(size_t ival) {
    return PyLong_FromSize_t(ival);
}


/* #### Code section: utility_code_pragmas_end ### */
#ifdef _MSC_VER
#pragma warning( pop )
#endif



/* #### Code section: end ### */
#endif /* Py_PYTHON_H */
