@@ -494,32 +494,28 @@ long Call_GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
494
494
495
495
func = PyImport_ImportModuleAttrString ("ctypes" , "DllGetClassObject" );
496
496
if (!func ) {
497
- PyErr_WriteUnraisable (context ? context : Py_None );
498
497
/* There has been a warning before about this already */
499
- return E_FAIL ;
498
+ goto error ;
500
499
}
501
500
502
501
{
503
502
PyObject * py_rclsid = PyLong_FromVoidPtr ((void * )rclsid );
504
503
if (py_rclsid == NULL ) {
505
504
Py_DECREF (func );
506
- PyErr_WriteUnraisable (context ? context : Py_None );
507
- return E_FAIL ;
505
+ goto error ;
508
506
}
509
507
PyObject * py_riid = PyLong_FromVoidPtr ((void * )riid );
510
508
if (py_riid == NULL ) {
511
509
Py_DECREF (func );
512
510
Py_DECREF (py_rclsid );
513
- PyErr_WriteUnraisable (context ? context : Py_None );
514
- return E_FAIL ;
511
+ goto error ;
515
512
}
516
513
PyObject * py_ppv = PyLong_FromVoidPtr (ppv );
517
514
if (py_ppv == NULL ) {
518
515
Py_DECREF (py_rclsid );
519
516
Py_DECREF (py_riid );
520
517
Py_DECREF (func );
521
- PyErr_WriteUnraisable (context ? context : Py_None );
522
- return E_FAIL ;
518
+ goto error ;
523
519
}
524
520
result = PyObject_CallFunctionObjArgs (func ,
525
521
py_rclsid ,
@@ -532,17 +528,21 @@ long Call_GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
532
528
}
533
529
Py_DECREF (func );
534
530
if (!result ) {
535
- PyErr_WriteUnraisable (context ? context : Py_None );
536
- return E_FAIL ;
531
+ goto error ;
537
532
}
538
533
539
534
retval = PyLong_AsLong (result );
540
535
if (PyErr_Occurred ()) {
541
- PyErr_WriteUnraisable ( context ? context : Py_None );
542
- retval = E_FAIL ;
536
+ Py_DECREF ( result );
537
+ goto error ;
543
538
}
544
539
Py_DECREF (result );
545
540
return retval ;
541
+
542
+ error :
543
+ PyErr_FormatUnraisable ("Exception ignored while calling "
544
+ "ctypes.DllGetClassObject" );
545
+ return E_FAIL ;
546
546
}
547
547
548
548
STDAPI DllGetClassObject (REFCLSID rclsid ,
@@ -580,24 +580,27 @@ long Call_CanUnloadNow(void)
580
580
func = PyObject_GetAttrString (mod , "DllCanUnloadNow" );
581
581
Py_DECREF (mod );
582
582
if (!func ) {
583
- PyErr_WriteUnraisable (context ? context : Py_None );
584
- return E_FAIL ;
583
+ goto error ;
585
584
}
586
585
587
586
result = _PyObject_CallNoArgs (func );
588
587
Py_DECREF (func );
589
588
if (!result ) {
590
- PyErr_WriteUnraisable (context ? context : Py_None );
591
- return E_FAIL ;
589
+ goto error ;
592
590
}
593
591
594
592
retval = PyLong_AsLong (result );
595
593
if (PyErr_Occurred ()) {
596
- PyErr_WriteUnraisable ( context ? context : Py_None );
597
- retval = E_FAIL ;
594
+ Py_DECREF ( result );
595
+ goto error ;
598
596
}
599
597
Py_DECREF (result );
600
598
return retval ;
599
+
600
+ error :
601
+ PyErr_FormatUnraisable ("Exception ignored while calling "
602
+ "ctypes.DllCanUnloadNow" );
603
+ return E_FAIL ;
601
604
}
602
605
603
606
/*
0 commit comments