add 'cl_shutdown()' in destructor of class EQL
This commit is contained in:
parent
7b692f4e12
commit
44056e0853
5 changed files with 20 additions and 6 deletions
|
|
@ -177,7 +177,8 @@ void iniCLFunctions() {
|
|||
DEFUN ("%qvariant-equal", qvariant_equal2, 2)
|
||||
DEFUN ("qvariant-from-value", qvariant_from_value, 2)
|
||||
DEFUN ("qvariant-value", qvariant_value, 1)
|
||||
DEFUN ("qversion", qversion, 0) }
|
||||
DEFUN ("qversion", qversion, 0)
|
||||
DEFUN ("%set-shutdown-p", set_shutdown_p, 1) }
|
||||
|
||||
// QtObject methods
|
||||
|
||||
|
|
@ -1854,6 +1855,10 @@ cl_object qset_gc(cl_object l_obj) {
|
|||
_garbage_collection_ = (l_obj != ECL_NIL);
|
||||
ecl_return1(ecl_process_env(), l_obj); }
|
||||
|
||||
cl_object set_shutdown_p(cl_object l_obj) {
|
||||
EQL::cl_shutdown_p = (l_obj != ECL_NIL);
|
||||
ecl_return1(ecl_process_env(), l_obj); }
|
||||
|
||||
enum { GarbageCollection = 1 };
|
||||
|
||||
cl_object qdelete2(cl_object l_obj, cl_object l_later) {
|
||||
|
|
|
|||
|
|
@ -295,6 +295,7 @@ cl_object qvariant_equal2 (cl_object, cl_object);
|
|||
cl_object qvariant_from_value (cl_object, cl_object);
|
||||
cl_object qvariant_value (cl_object);
|
||||
cl_object qversion ();
|
||||
cl_object set_shutdown_p (cl_object);
|
||||
|
||||
struct EQL_EXPORT QtObject {
|
||||
void* pointer;
|
||||
|
|
|
|||
13
src/eql.cpp
13
src/eql.cpp
|
|
@ -41,18 +41,22 @@ EQL::EQL() : QObject() {
|
|||
#ifdef COMPILE_ANDROID
|
||||
qInstallMessageHandler(logMessageHandler); // see above
|
||||
#endif
|
||||
if(!cl_booted) {
|
||||
if(!cl_booted_p) {
|
||||
cl_boot(1, (char**)_argv_); }
|
||||
iniCLFunctions();
|
||||
LObjects::ini(this);
|
||||
ecl_init_module(NULL, ini_EQL); } // see "src/make.lisp"
|
||||
|
||||
EQL::~EQL() {
|
||||
if(!EQL::cl_shutdown_p) {
|
||||
cl_shutdown(); }}
|
||||
|
||||
void EQL::ini(char** argv) {
|
||||
cl_booted = true;
|
||||
cl_booted_p = true;
|
||||
cl_boot(1, argv); }
|
||||
|
||||
void EQL::ini(int argc, char** argv) {
|
||||
cl_booted = true;
|
||||
cl_booted_p = true;
|
||||
cl_boot(argc, argv); }
|
||||
|
||||
static void safe_eval_debug(const char* lisp_code) {
|
||||
|
|
@ -222,7 +226,8 @@ void EQL::runOnUiThread(void* function_or_closure) {
|
|||
CL_CATCH_ALL_END; }
|
||||
|
||||
EQL::EvalMode EQL::evalMode = DieOnError;
|
||||
bool EQL::cl_booted = false;
|
||||
bool EQL::cl_booted_p = false;
|
||||
bool EQL::cl_shutdown_p = false;
|
||||
bool EQL::return_value_p = false;
|
||||
bool EQL::qexec = true;
|
||||
QEventLoop* EQL::eventLoop = 0;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ class EQL_EXPORT EQL : public QObject {
|
|||
Q_OBJECT
|
||||
public:
|
||||
EQL();
|
||||
~EQL();
|
||||
|
||||
enum EvalMode {
|
||||
DebugOnError,
|
||||
|
|
@ -32,7 +33,8 @@ public:
|
|||
DieOnError,
|
||||
};
|
||||
|
||||
static bool cl_booted;
|
||||
static bool cl_booted_p;
|
||||
static bool cl_shutdown_p;
|
||||
static bool return_value_p;
|
||||
static bool qexec;
|
||||
static const char version[];
|
||||
|
|
|
|||
|
|
@ -751,6 +751,7 @@
|
|||
(qfun (qapp) "aboutToQuit")
|
||||
(qfun (qapp) "quit")
|
||||
(ffi:c-inline nil nil :void "cl_shutdown();" :one-liner t :side-effects t)
|
||||
(%set-shutdown-p t) ; prevent multiple calls of 'cl_shutdown()', see 'eql.cpp:~EQL()'
|
||||
(if (minusp exit-status)
|
||||
(ffi:c-inline nil nil :void "abort();" :one-liner t :side-effects t)
|
||||
(ffi:c-inline (exit-status) (:int) :void "exit(#0);" :one-liner t :side-effects t)))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue