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) "";
"Welcome to our mercurial repository"