diff --git a/src/action/new.cc b/src/action/new.cc index 7622056..c7c1cad 100644 --- a/src/action/new.cc +++ b/src/action/new.cc @@ -42,13 +42,27 @@ DLL_PRIVATE PyObject * py3270_action_new_from_session(PyObject *session, void *action) { pyAction * pObj = (pyAction *) _PyObject_New(&py3270_action_type); - + pObj->action = nullptr; pObj->session = (pySession *) session; - pObj->action = pObj->session->host->getAction((const LIB3270_ACTION *) action); + Py_INCREF(pObj->session); - debug("%s: ob_refcnt@%p=%ld",__FUNCTION__,pObj,((PyObject *) pObj)->ob_refcnt); + try { - Py_INCREF(pObj->session); + pObj->action = pObj->session->host->getAction((const LIB3270_ACTION *) action); + + } catch(const std::exception &e) { + + Py_DECREF((PyObject *) pObj); + PyErr_SetString(PyExc_RuntimeError, e.what()); + return NULL; + + } catch(...) { + + Py_DECREF((PyObject *) pObj); + PyErr_SetString(PyExc_RuntimeError, "Unexpected error creating action object"); + return NULL; + + } return (PyObject *) pObj; @@ -62,7 +76,9 @@ void py3270_action_dealloc(PyObject * self) { Py_DECREF(pObj->session); - delete pObj->action; + if(pObj->action) + delete pObj->action; + pObj->action = nullptr; } diff --git a/testprograms/sample.py b/testprograms/sample.py index db47556..f6cbd82 100644 --- a/testprograms/sample.py +++ b/testprograms/sample.py @@ -7,7 +7,7 @@ import tn3270 print("Using TN3270 Version " + tn3270.version()) print(tn3270.revision()) -session = tn3270.Session("") +session = tn3270.Session(":a") print("Using tn3270 version " + session.version + " revision " + session.revision) @@ -16,6 +16,8 @@ print("Using tn3270 version " + session.version + " revision " + session.revisio #print(session.connected) #print(session.url) +print(session.reconnect) + # # Can reconnect? If yes do it! # @@ -23,7 +25,6 @@ if session.reconnect.activatable: print("Reconnecting...") session.reconnect().wait(10) -print(session.reconnect) print(session.connected) #print('----------------------') -- libgit2 0.21.2