@@ -576,8 +576,16 @@ _ctypes_CType_Type___sizeof___impl(PyObject *self, PyTypeObject *cls)
576576 return PyLong_FromSsize_t (size );
577577}
578578
579+ /*[clinic input]
580+ @getter
581+ @critical_section
582+ _ctypes.CType_Type.__pointer_type__
583+
584+ [clinic start generated code]*/
585+
579586static PyObject *
580- ctype_get_pointer_type (PyObject * self , void * Py_UNUSED (ignored ))
587+ _ctypes_CType_Type___pointer_type___get_impl (PyObject * self )
588+ /*[clinic end generated code: output=718c9ff10b2b0012 input=ff7498aa6edf487c]*/
581589{
582590 ctypes_state * st = get_module_state_by_def (Py_TYPE (self ));
583591 StgInfo * info ;
@@ -599,8 +607,16 @@ ctype_get_pointer_type(PyObject *self, void *Py_UNUSED(ignored))
599607 return NULL ;
600608}
601609
610+ /*[clinic input]
611+ @setter
612+ @critical_section
613+ _ctypes.CType_Type.__pointer_type__
614+
615+ [clinic start generated code]*/
616+
602617static int
603- ctype_set_pointer_type (PyObject * self , PyObject * tp , void * Py_UNUSED (ignored ))
618+ _ctypes_CType_Type___pointer_type___set_impl (PyObject * self , PyObject * value )
619+ /*[clinic end generated code: output=6259be8ea21693fa input=9b2dc2400c388982]*/
604620{
605621 ctypes_state * st = get_module_state_by_def (Py_TYPE (self ));
606622 StgInfo * info ;
@@ -612,7 +628,7 @@ ctype_set_pointer_type(PyObject *self, PyObject *tp, void *Py_UNUSED(ignored))
612628 return -1 ;
613629 }
614630
615- Py_XSETREF (info -> pointer_type , Py_XNewRef (tp ));
631+ Py_XSETREF (info -> pointer_type , Py_XNewRef (value ));
616632 return 0 ;
617633}
618634
@@ -626,8 +642,7 @@ static PyMethodDef ctype_methods[] = {
626642};
627643
628644static PyGetSetDef ctype_getsets [] = {
629- { "__pointer_type__" , ctype_get_pointer_type , ctype_set_pointer_type ,
630- "pointer type" , NULL },
645+ _CTYPES_CTYPE_TYPE___POINTER_TYPE___GETSETDEF
631646 { NULL , NULL }
632647};
633648
@@ -1254,9 +1269,11 @@ PyCPointerType_SetProto(ctypes_state *st, PyObject *self, StgInfo *stginfo, PyOb
12541269 return -1 ;
12551270 }
12561271 Py_XSETREF (stginfo -> proto , Py_NewRef (proto ));
1272+ STGINFO_LOCK (info );
12571273 if (info -> pointer_type == NULL ) {
12581274 Py_XSETREF (info -> pointer_type , Py_NewRef (self ));
12591275 }
1276+ STGINFO_UNLOCK ();
12601277 return 0 ;
12611278}
12621279
0 commit comments