summaryrefslogtreecommitdiffstats
path: root/Demo/embed
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/embed')
-rw-r--r--Demo/embed/Makefile9
-rw-r--r--Demo/embed/README7
-rw-r--r--Demo/embed/loop.c26
3 files changed, 41 insertions, 1 deletions
diff --git a/Demo/embed/Makefile b/Demo/embed/Makefile
index fb2b1ed..ee0196b 100644
--- a/Demo/embed/Makefile
+++ b/Demo/embed/Makefile
@@ -32,13 +32,20 @@ all: demo
demo: demo.o
$(CC) $(LDFLAGS) demo.o $(ALLLIBS) -o demo
+loop: loop.o
+ $(CC) $(LDFLAGS) loop.o $(ALLLIBS) -o loop
+
# Administrative targets
test: demo
./demo
+COMMAND="print 'hello world'"
+looptest: loop
+ ./loop $(COMMAND)
+
clean:
-rm -f *.o core
clobber: clean
- -rm -f *~ @* '#'* demo
+ -rm -f *~ @* '#'* demo loop
diff --git a/Demo/embed/README b/Demo/embed/README
index 8858c71..a0f7af8 100644
--- a/Demo/embed/README
+++ b/Demo/embed/README
@@ -10,3 +10,10 @@ the source directory (../..)
2) change the variables that together define the list of libraries
(MODLIBS, LIBS, SYSLIBS) to link with, to match their definitions in
$(blddir)/Modules/Makefile
+
+An additional test program, loop.c, is used to experiment with memory
+leakage caused by repeated initialization and finalization of the
+interpreter. It can be build by saying "make loop" and tested with
+"make looptest". Command line usage is "./loop <python-command>",
+e.g. "./loop 'print 2+2'" should spit out an endless number of lines
+containing the number 4.
diff --git a/Demo/embed/loop.c b/Demo/embed/loop.c
new file mode 100644
index 0000000..ca89cb7
--- /dev/null
+++ b/Demo/embed/loop.c
@@ -0,0 +1,26 @@
+/* Simple program that repeatedly calls Py_Initialize(), does something, and
+ then calls Py_Finalize(). This should help finding leaks related to
+ initialization. */
+
+#include "Python.h"
+
+main(int argc, char **argv)
+{
+ char *command;
+
+ if (argc != 2) {
+ fprintf(stderr, "usage: loop <python-command>\n");
+ exit(2);
+ }
+
+ command = argv[1];
+
+ Py_SetProgramName(argv[0]);
+
+ while (1) {
+ Py_Initialize();
+ PyRun_SimpleString(command);
+ Py_Finalize();
+ }
+ /*NOTREACHED*/
+}