@@ -494,32 +494,28 @@ long Call_GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
494494
495495 func = PyImport_ImportModuleAttrString ("ctypes" , "DllGetClassObject" );
496496 if (!func ) {
497- PyErr_WriteUnraisable (context ? context : Py_None );
498497 /* There has been a warning before about this already */
499- return E_FAIL ;
498+ goto error ;
500499 }
501500
502501 {
503502 PyObject * py_rclsid = PyLong_FromVoidPtr ((void * )rclsid );
504503 if (py_rclsid == NULL ) {
505504 Py_DECREF (func );
506- PyErr_WriteUnraisable (context ? context : Py_None );
507- return E_FAIL ;
505+ goto error ;
508506 }
509507 PyObject * py_riid = PyLong_FromVoidPtr ((void * )riid );
510508 if (py_riid == NULL ) {
511509 Py_DECREF (func );
512510 Py_DECREF (py_rclsid );
513- PyErr_WriteUnraisable (context ? context : Py_None );
514- return E_FAIL ;
511+ goto error ;
515512 }
516513 PyObject * py_ppv = PyLong_FromVoidPtr (ppv );
517514 if (py_ppv == NULL ) {
518515 Py_DECREF (py_rclsid );
519516 Py_DECREF (py_riid );
520517 Py_DECREF (func );
521- PyErr_WriteUnraisable (context ? context : Py_None );
522- return E_FAIL ;
518+ goto error ;
523519 }
524520 result = PyObject_CallFunctionObjArgs (func ,
525521 py_rclsid ,
@@ -532,17 +528,21 @@ long Call_GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
532528 }
533529 Py_DECREF (func );
534530 if (!result ) {
535- PyErr_WriteUnraisable (context ? context : Py_None );
536- return E_FAIL ;
531+ goto error ;
537532 }
538533
539534 retval = PyLong_AsLong (result );
540535 if (PyErr_Occurred ()) {
541- PyErr_WriteUnraisable ( context ? context : Py_None );
542- retval = E_FAIL ;
536+ Py_DECREF ( result );
537+ goto error ;
543538 }
544539 Py_DECREF (result );
545540 return retval ;
541+
542+ error :
543+ PyErr_FormatUnraisable ("Exception ignored while calling "
544+ "ctypes.DllGetClassObject" );
545+ return E_FAIL ;
546546}
547547
548548STDAPI DllGetClassObject (REFCLSID rclsid ,
@@ -580,24 +580,27 @@ long Call_CanUnloadNow(void)
580580 func = PyObject_GetAttrString (mod , "DllCanUnloadNow" );
581581 Py_DECREF (mod );
582582 if (!func ) {
583- PyErr_WriteUnraisable (context ? context : Py_None );
584- return E_FAIL ;
583+ goto error ;
585584 }
586585
587586 result = _PyObject_CallNoArgs (func );
588587 Py_DECREF (func );
589588 if (!result ) {
590- PyErr_WriteUnraisable (context ? context : Py_None );
591- return E_FAIL ;
589+ goto error ;
592590 }
593591
594592 retval = PyLong_AsLong (result );
595593 if (PyErr_Occurred ()) {
596- PyErr_WriteUnraisable ( context ? context : Py_None );
597- retval = E_FAIL ;
594+ Py_DECREF ( result );
595+ goto error ;
598596 }
599597 Py_DECREF (result );
600598 return retval ;
599+
600+ error :
601+ PyErr_FormatUnraisable ("Exception ignored while calling "
602+ "ctypes.DllCanUnloadNow" );
603+ return E_FAIL ;
601604}
602605
603606/*
0 commit comments