Mercurial > hg > freeDiameter
changeset 1183:42d3fd71e7ea
dbg_interactive is segfaulting when exited with Ctrl-C, not sure how to fix it...
author | Sebastien Decugis <sdecugis@freediameter.net> |
---|---|
date | Thu, 06 Jun 2013 15:49:38 +0800 |
parents | cc96a4dfb3d1 |
children | 8c340f832127 |
files | extensions/dbg_interactive/dbg_interactive.c extensions/dbg_interactive/dbg_interactive.i |
diffstat | 2 files changed, 7 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/extensions/dbg_interactive/dbg_interactive.c Thu Jun 06 11:25:23 2013 +0800 +++ b/extensions/dbg_interactive/dbg_interactive.c Thu Jun 06 15:49:38 2013 +0800 @@ -55,6 +55,7 @@ static void * myinterp (void * arg) { char * dum[3] = { "<dbg_interactive>", arg, NULL }; + TRACE_ENTRY("%p", arg); fd_log_threadname ( "fDpy" ); @@ -70,10 +71,12 @@ goto end; } printf("Starting interactive python interpreter [experimental].\n"); + printf("Please use Ctrl-D to exit.\n"); printf("Example syntax:\n"); printf(" >>> print cvar.fd_g_config.cnf_diamid\n"); printf(" '%s'\n", fd_g_config->cnf_diamid); Py_Main(1, dum); + printf("Python interpreter has exited...\n"); } end: @@ -92,7 +95,7 @@ int mustfree = 0; TRACE_ENTRY("%p", conffile); - Py_Initialize(); + Py_InitializeEx(0); WRAPPER_INIT; @@ -124,11 +127,11 @@ void fd_ext_fini(void) { TRACE_ENTRY(); - - CHECK_FCT_DO(fd_thr_term(&pyinterp), ); + void * ret; /* Cleanup the python interpreter */ Py_Finalize(); + pthread_join(pyinterp, &ret); return ; }
--- a/extensions/dbg_interactive/dbg_interactive.i Thu Jun 06 11:25:23 2013 +0800 +++ b/extensions/dbg_interactive/dbg_interactive.i Thu Jun 06 15:49:38 2013 +0800 @@ -122,7 +122,7 @@ } /* Case of the fd_*_dump functions */ -%typemap(in,noblock=1,numinputs=0) (char ** buf, size_t *len, size_t *offset) ($*1_ltype temp = NULL, $*2_ltype tempn) { +%typemap(in,noblock=1,numinputs=0) (char ** buf, size_t *len, size_t *offset) ($*1_ltype temp = NULL, $*2_ltype tempn = 0) { $1 = &temp; $2 = &tempn; $3 = NULL; } %typemap(freearg,match="in") (char ** buf, size_t *len, size_t *offset) "";