Skip to content

Commit be706de

Browse files
authored
Merge pull request #4 from saulzar/master
Fix this <class 'nvjpeg.NvJpeg'> returned NULL without setting an error
2 parents d5c1c26 + ac3599c commit be706de

File tree

2 files changed

+36
-31
lines changed

2 files changed

+36
-31
lines changed

nvjpeg-python.c

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,13 @@ NvJpegPythonHandle* NvJpegPython_startUpEnv(){
4545
}
4646

4747
void NvJpegPython_cleanUpEnv(){
48-
nvjpegJpegStateDestroy((__gllobal_NvJpegPython)->nv_statue);
49-
nvjpegEncoderStateDestroy((__gllobal_NvJpegPython)->nv_enc_state);
50-
nvjpegDestroy((__gllobal_NvJpegPython)->nv_handle);
51-
free(__gllobal_NvJpegPython);
52-
__gllobal_NvJpegPython = NULL;
48+
if(__gllobal_NvJpegPython != NULL) {
49+
nvjpegJpegStateDestroy((__gllobal_NvJpegPython)->nv_statue);
50+
nvjpegEncoderStateDestroy((__gllobal_NvJpegPython)->nv_enc_state);
51+
nvjpegDestroy((__gllobal_NvJpegPython)->nv_handle);
52+
free(__gllobal_NvJpegPython);
53+
__gllobal_NvJpegPython = NULL;
54+
}
5355
}
5456

5557
NvJpegPythonImage* NvJpegPython_createImage(int width, int height, int nComponent, nvjpegChromaSubsampling_t subsampling){
@@ -252,12 +254,12 @@ static PyMemberDef NvJpeg_DataMembers[] =
252254
{NULL, 0, 0, 0, NULL}
253255
};
254256

255-
256-
static void NvJpeg_init(NvJpeg* Self, PyObject* pArgs)
257-
{
258-
Self->m_handle = (long long)(NvJpegPython_startUpEnv());
257+
int NvJpeg_init(NvJpeg *self, PyObject *args, PyObject *kwds) {
258+
self->m_handle = (long long)(NvJpegPython_startUpEnv());
259+
return 0;
259260
}
260261

262+
261263
static void NvJpeg_Destruct(NvJpeg* Self)
262264
{
263265
Py_TYPE(Self)->tp_free((PyObject*)Self);
@@ -435,25 +437,22 @@ static PyMethodDef NvJpeg_MethodMembers[] =
435437

436438
static PyTypeObject NvJpeg_ClassInfo =
437439
{
438-
PyVarObject_HEAD_INIT(NULL, 0)"nvjpeg.NvJpeg",
439-
sizeof(NvJpeg),
440-
0,
441-
(destructor)NvJpeg_Destruct,
442-
NULL,NULL,NULL,NULL,
443-
(reprfunc)NvJpeg_Repr,
444-
NULL,NULL,NULL,NULL,NULL,
445-
(reprfunc)NvJpeg_Str,
446-
NULL,NULL,NULL,
447-
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
448-
"NvJpeg Python Objects---Extensioned by nvjpeg",
449-
NULL,NULL,NULL,0,NULL,NULL,
450-
NvJpeg_MethodMembers,
451-
NvJpeg_DataMembers,
452-
NULL,NULL,NULL,NULL,NULL,0,
453-
(initproc)NvJpeg_init,
454-
NULL,
440+
PyVarObject_HEAD_INIT(NULL, 0)
441+
.tp_name = "nvjpeg.NvJpeg",
442+
.tp_new = PyType_GenericNew,
443+
.tp_basicsize = sizeof(NvJpeg),
444+
.tp_dealloc = NvJpeg_Destruct,
445+
.tp_repr = NvJpeg_Repr,
446+
.tp_str = NvJpeg_Str,
447+
.tp_flags = Py_TPFLAGS_DEFAULT,
448+
.tp_doc = "NvJpeg Python Objects---Extensioned by nvjpeg",
449+
.tp_methods = NvJpeg_MethodMembers,
450+
.tp_members = NvJpeg_DataMembers,
451+
.tp_init = NvJpeg_init,
452+
.tp_itemsize = 0,
455453
};
456454

455+
457456
void NvJpeg_module_destroy(void *_){
458457
NvJpegPython_cleanUpEnv();
459458
}
@@ -471,18 +470,23 @@ static PyModuleDef ModuleInfo =
471470
PyMODINIT_FUNC
472471
PyInit_nvjpeg(void) {
473472
PyObject * pReturn = NULL;
474-
NvJpeg_ClassInfo.tp_new = PyType_GenericNew;
475473

476-
477-
if(PyType_Ready(&NvJpeg_ClassInfo) < 0)
474+
if(PyType_Ready(&NvJpeg_ClassInfo) < 0)
478475
return NULL;
479476

480477
pReturn = PyModule_Create(&ModuleInfo);
481478
if(pReturn == NULL)
482479
return NULL;
483480

484481
Py_INCREF(&ModuleInfo);
485-
PyModule_AddObject(pReturn, "NvJpeg", (PyObject*)&NvJpeg_ClassInfo);
482+
483+
Py_INCREF(&NvJpeg_ClassInfo);
484+
if (PyModule_AddObject(pReturn, "NvJpeg", (PyObject*)&NvJpeg_ClassInfo) < 0) {
485+
Py_DECREF(&NvJpeg_ClassInfo);
486+
Py_DECREF(pReturn);
487+
return NULL;
488+
}
489+
486490
import_array();
487491
return pReturn;
488492
}

tests/test-with-multiprocessing.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
for lib in glob.glob(os.path.join(os.path.dirname(__file__), "../build/lib.*")):
1111
sys.path.append(lib)
1212

13-
from nvjpeg import NvJpeg
13+
from nvjpeg import NvJpeg
14+
nj = NvJpeg()
1415

1516

1617
image_dir = os.path.join(os.path.dirname(__file__), "test-image")

0 commit comments

Comments
 (0)