@@ -448,6 +448,15 @@ set_fp_invalid_or_clear(int error_occurred)
448448 }
449449}
450450
451+ static inline void
452+ report_no_memory ()
453+ {
454+ NPY_ALLOW_C_API_DEF
455+ NPY_ALLOW_C_API ;
456+ PyErr_NoMemory ();
457+ NPY_DISABLE_C_API ;
458+ }
459+
451460/*
452461 *****************************************************************************
453462 ** Some handy constants **
@@ -1199,10 +1208,7 @@ slogdet(char **args,
11991208 }
12001209 else {
12011210 /* TODO: Requires use of new ufunc API to indicate error return */
1202- NPY_ALLOW_C_API_DEF
1203- NPY_ALLOW_C_API ;
1204- PyErr_NoMemory ();
1205- NPY_DISABLE_C_API ;
1211+ report_no_memory ();
12061212 }
12071213}
12081214
@@ -1255,10 +1261,7 @@ det(char **args,
12551261 }
12561262 else {
12571263 /* TODO: Requires use of new ufunc API to indicate error return */
1258- NPY_ALLOW_C_API_DEF
1259- NPY_ALLOW_C_API ;
1260- PyErr_NoMemory ();
1261- NPY_DISABLE_C_API ;
1264+ report_no_memory ();
12621265 }
12631266}
12641267
@@ -1331,7 +1334,7 @@ init_evd(EIGH_PARAMS_t<typ>* params, char JOBZ, char UPLO,
13311334 mem_buff = (npy_uint8 * )malloc (alloc_size );
13321335
13331336 if (!mem_buff ) {
1334- goto error ;
1337+ goto no_memory ;
13351338 }
13361339 a = mem_buff ;
13371340 w = mem_buff + safe_N * safe_N * sizeof (typ );
@@ -1365,7 +1368,7 @@ init_evd(EIGH_PARAMS_t<typ>* params, char JOBZ, char UPLO,
13651368
13661369 mem_buff2 = (npy_uint8 * )malloc (lwork * sizeof (typ ) + liwork * sizeof (fortran_int ));
13671370 if (!mem_buff2 ) {
1368- goto error ;
1371+ goto no_memory ;
13691372 }
13701373
13711374 work = mem_buff2 ;
@@ -1378,6 +1381,9 @@ init_evd(EIGH_PARAMS_t<typ>* params, char JOBZ, char UPLO,
13781381
13791382 return 1 ;
13801383
1384+ no_memory :
1385+ report_no_memory ();
1386+
13811387 error :
13821388 /* something failed */
13831389 memset (params , 0 , sizeof (* params ));
@@ -1440,7 +1446,7 @@ using fbasetyp = fortran_type_t<basetyp>;
14401446 mem_buff = (npy_uint8 * )malloc (safe_N * safe_N * sizeof (typ ) +
14411447 safe_N * sizeof (basetyp ));
14421448 if (!mem_buff ) {
1443- goto error ;
1449+ goto no_memory ;
14441450 }
14451451 a = mem_buff ;
14461452 w = mem_buff + safe_N * safe_N * sizeof (typ );
@@ -1478,7 +1484,7 @@ using fbasetyp = fortran_type_t<basetyp>;
14781484 lrwork * sizeof (basetyp ) +
14791485 liwork * sizeof (fortran_int ));
14801486 if (!mem_buff2 ) {
1481- goto error ;
1487+ goto no_memory ;
14821488 }
14831489
14841490 work = mem_buff2 ;
@@ -1495,6 +1501,8 @@ using fbasetyp = fortran_type_t<basetyp>;
14951501 return 1 ;
14961502
14971503 /* something failed */
1504+ no_memory :
1505+ report_no_memory ();
14981506error :
14991507 memset (params , 0 , sizeof (* params ));
15001508 free (mem_buff2 );
@@ -1733,7 +1741,10 @@ init_gesv(GESV_PARAMS_t<ftyp> *params, fortran_int N, fortran_int NRHS)
17331741 params -> LDB = ld ;
17341742
17351743 return 1 ;
1744+
17361745 error :
1746+ report_no_memory ();
1747+
17371748 free (mem_buff );
17381749 memset (params , 0 , sizeof (* params ));
17391750
@@ -1977,6 +1988,8 @@ init_potrf(POTR_PARAMS_t<ftyp> *params, char UPLO, fortran_int N)
19771988
19781989 return 1 ;
19791990 error :
1991+ report_no_memory ();
1992+
19801993 free (mem_buff );
19811994 memset (params , 0 , sizeof (* params ));
19821995
@@ -2175,7 +2188,7 @@ scalar_trait)
21752188 vlr_size + vrr_size +
21762189 w_size + vl_size + vr_size );
21772190 if (!mem_buff ) {
2178- goto error ;
2191+ goto no_memory ;
21792192 }
21802193
21812194 a = mem_buff ;
@@ -2218,14 +2231,18 @@ scalar_trait)
22182231
22192232 mem_buff2 = (npy_uint8 * )malloc (work_count * sizeof (typ ));
22202233 if (!mem_buff2 ) {
2221- goto error ;
2234+ goto no_memory ;
22222235 }
22232236 work = mem_buff2 ;
22242237
22252238 params -> LWORK = (fortran_int )work_count ;
22262239 params -> WORK = (typ * )work ;
22272240
22282241 return 1 ;
2242+
2243+ no_memory :
2244+ report_no_memory ();
2245+
22292246 error :
22302247 free (mem_buff2 );
22312248 free (mem_buff );
@@ -2392,7 +2409,7 @@ using realtyp = basetype_t<ftyp>;
23922409
23932410 mem_buff = (npy_uint8 * )malloc (total_size );
23942411 if (!mem_buff ) {
2395- goto error ;
2412+ goto no_memory ;
23962413 }
23972414
23982415 a = mem_buff ;
@@ -2434,7 +2451,7 @@ using realtyp = basetype_t<ftyp>;
24342451
24352452 mem_buff2 = (npy_uint8 * )malloc (work_count * sizeof (ftyp ));
24362453 if (!mem_buff2 ) {
2437- goto error ;
2454+ goto no_memory ;
24382455 }
24392456
24402457 work = mem_buff2 ;
@@ -2443,6 +2460,9 @@ using realtyp = basetype_t<ftyp>;
24432460 params -> WORK = (ftyp * )work ;
24442461
24452462 return 1 ;
2463+
2464+ no_memory :
2465+ report_no_memory ();
24462466 error :
24472467 free (mem_buff2 );
24482468 free (mem_buff );
@@ -2754,7 +2774,7 @@ init_gesdd(GESDD_PARAMS_t<ftyp> *params,
27542774 mem_buff = (npy_uint8 * )malloc (a_size + s_size + u_size + vt_size + iwork_size );
27552775
27562776 if (!mem_buff ) {
2757- goto error ;
2777+ goto no_memory ;
27582778 }
27592779
27602780 a = mem_buff ;
@@ -2798,7 +2818,7 @@ init_gesdd(GESDD_PARAMS_t<ftyp> *params,
27982818
27992819 mem_buff2 = (npy_uint8 * )malloc (work_size );
28002820 if (!mem_buff2 ) {
2801- goto error ;
2821+ goto no_memory ;
28022822 }
28032823
28042824 work = mem_buff2 ;
@@ -2807,6 +2827,9 @@ init_gesdd(GESDD_PARAMS_t<ftyp> *params,
28072827 params -> WORK = (ftyp * )work ;
28082828
28092829 return 1 ;
2830+
2831+ no_memory :
2832+ report_no_memory ();
28102833 error :
28112834 TRACE_TXT ("%s failed init\n" , __FUNCTION__ );
28122835 free (mem_buff );
@@ -2894,7 +2917,7 @@ using frealtyp = basetype_t<ftyp>;
28942917 rwork_size +
28952918 iwork_size );
28962919 if (!mem_buff ) {
2897- goto error ;
2920+ goto no_memory ;
28982921 }
28992922
29002923 a = mem_buff ;
@@ -2939,7 +2962,7 @@ using frealtyp = basetype_t<ftyp>;
29392962
29402963 mem_buff2 = (npy_uint8 * )malloc (work_size );
29412964 if (!mem_buff2 ) {
2942- goto error ;
2965+ goto no_memory ;
29432966 }
29442967
29452968 work = mem_buff2 ;
@@ -2948,6 +2971,10 @@ using frealtyp = basetype_t<ftyp>;
29482971 params -> WORK = (ftyp * )work ;
29492972
29502973 return 1 ;
2974+
2975+ no_memory :
2976+ report_no_memory ();
2977+
29512978 error :
29522979 TRACE_TXT ("%s failed init\n" , __FUNCTION__ );
29532980 free (mem_buff2 );
@@ -3186,7 +3213,7 @@ using ftyp = fortran_doublereal;
31863213 mem_buff = (npy_uint8 * )malloc (a_size + tau_size );
31873214
31883215 if (!mem_buff )
3189- goto error ;
3216+ goto no_memory ;
31903217
31913218 a = mem_buff ;
31923219 tau = a + a_size ;
@@ -3219,13 +3246,17 @@ using ftyp = fortran_doublereal;
32193246 work_size = (size_t ) params -> LWORK * sizeof (ftyp );
32203247 mem_buff2 = (npy_uint8 * )malloc (work_size );
32213248 if (!mem_buff2 )
3222- goto error ;
3249+ goto no_memory ;
32233250
32243251 work = mem_buff2 ;
32253252
32263253 params -> WORK = (ftyp * )work ;
32273254
32283255 return 1 ;
3256+
3257+ no_memory :
3258+ report_no_memory ();
3259+
32293260 error :
32303261 TRACE_TXT ("%s failed init\n" , __FUNCTION__ );
32313262 free (mem_buff );
@@ -3260,7 +3291,7 @@ using ftyp = fortran_doublecomplex;
32603291 mem_buff = (npy_uint8 * )malloc (a_size + tau_size );
32613292
32623293 if (!mem_buff )
3263- goto error ;
3294+ goto no_memory ;
32643295
32653296 a = mem_buff ;
32663297 tau = a + a_size ;
@@ -3295,13 +3326,17 @@ using ftyp = fortran_doublecomplex;
32953326
32963327 mem_buff2 = (npy_uint8 * )malloc (work_size );
32973328 if (!mem_buff2 )
3298- goto error ;
3329+ goto no_memory ;
32993330
33003331 work = mem_buff2 ;
33013332
33023333 params -> WORK = (ftyp * )work ;
33033334
33043335 return 1 ;
3336+
3337+ no_memory :
3338+ report_no_memory ();
3339+
33053340 error :
33063341 TRACE_TXT ("%s failed init\n" , __FUNCTION__ );
33073342 free (mem_buff );
@@ -3433,7 +3468,7 @@ using ftyp = fortran_doublereal;
34333468 mem_buff = (npy_uint8 * )malloc (q_size + tau_size + a_size );
34343469
34353470 if (!mem_buff )
3436- goto error ;
3471+ goto no_memory ;
34373472
34383473 q = mem_buff ;
34393474 tau = q + q_size ;
@@ -3468,13 +3503,17 @@ using ftyp = fortran_doublereal;
34683503
34693504 mem_buff2 = (npy_uint8 * )malloc (work_size );
34703505 if (!mem_buff2 )
3471- goto error ;
3506+ goto no_memory ;
34723507
34733508 work = mem_buff2 ;
34743509
34753510 params -> WORK = (ftyp * )work ;
34763511
34773512 return 1 ;
3513+
3514+ no_memory :
3515+ report_no_memory ();
3516+
34783517 error :
34793518 TRACE_TXT ("%s failed init\n" , __FUNCTION__ );
34803519 free (mem_buff );
@@ -3512,7 +3551,7 @@ using ftyp=fortran_doublecomplex;
35123551 mem_buff = (npy_uint8 * )malloc (q_size + tau_size + a_size );
35133552
35143553 if (!mem_buff )
3515- goto error ;
3554+ goto no_memory ;
35163555
35173556 q = mem_buff ;
35183557 tau = q + q_size ;
@@ -3548,14 +3587,18 @@ using ftyp=fortran_doublecomplex;
35483587
35493588 mem_buff2 = (npy_uint8 * )malloc (work_size );
35503589 if (!mem_buff2 )
3551- goto error ;
3590+ goto no_memory ;
35523591
35533592 work = mem_buff2 ;
35543593
35553594 params -> WORK = (ftyp * )work ;
35563595 params -> LWORK = work_count ;
35573596
35583597 return 1 ;
3598+
3599+ no_memory :
3600+ report_no_memory ();
3601+
35593602 error :
35603603 TRACE_TXT ("%s failed init\n" , __FUNCTION__ );
35613604 free (mem_buff );
@@ -3898,10 +3941,7 @@ scalar_trait)
38983941 return 1 ;
38993942
39003943 no_memory :
3901- NPY_ALLOW_C_API_DEF
3902- NPY_ALLOW_C_API ;
3903- PyErr_NoMemory ();
3904- NPY_DISABLE_C_API ;
3944+ report_no_memory ();
39053945
39063946 error :
39073947 TRACE_TXT ("%s failed init\n" , __FUNCTION__ );
@@ -4034,10 +4074,7 @@ using frealtyp = basetype_t<ftyp>;
40344074 return 1 ;
40354075
40364076 no_memory :
4037- NPY_ALLOW_C_API_DEF
4038- NPY_ALLOW_C_API ;
4039- PyErr_NoMemory ();
4040- NPY_DISABLE_C_API ;
4077+ report_no_memory ();
40414078
40424079 error :
40434080 TRACE_TXT ("%s failed init\n" , __FUNCTION__ );
0 commit comments