summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjsip-apps/src/pygui/application.py26
-rw-r--r--pjsip-apps/src/swig/python/Makefile5
2 files changed, 25 insertions, 6 deletions
diff --git a/pjsip-apps/src/pygui/application.py b/pjsip-apps/src/pygui/application.py
index 0dd5fa50..b171f386 100644
--- a/pjsip-apps/src/pygui/application.py
+++ b/pjsip-apps/src/pygui/application.py
@@ -39,12 +39,18 @@ import settings
import os
import traceback
+# You may try to enable pjsua worker thread by setting USE_THREADS below to True *and*
+# recreate the swig module with adding -threads option to swig (uncomment USE_THREADS
+# in swig/python/Makefile). In my experiment this would crash Python as reported in:
+# http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2014-March/017223.html
+USE_THREADS = False
class Application(ttk.Frame):
"""
The Application main frame.
"""
def __init__(self):
+ global USE_THREADS
ttk.Frame.__init__(self, name='application', width=300, height=500)
self.pack(expand='yes', fill='both')
self.master.title('pjsua2 Demo')
@@ -73,8 +79,12 @@ class Application(ttk.Frame):
# Default config
self.appConfig = settings.AppConfig()
- self.appConfig.epConfig.uaConfig.threadCnt = 0;
- self.appConfig.epConfig.uaConfig.mainThreadOnly = True
+ if USE_THREADS:
+ self.appConfig.epConfig.uaConfig.threadCnt = 1
+ self.appConfig.epConfig.uaConfig.mainThreadOnly = False
+ else:
+ self.appConfig.epConfig.uaConfig.threadCnt = 0
+ self.appConfig.epConfig.uaConfig.mainThreadOnly = True
self.appConfig.epConfig.logConfig.writer = self.logger
self.appConfig.epConfig.logConfig.filename = "pygui.log"
self.appConfig.epConfig.logConfig.fileFlags = pj.PJ_O_APPEND
@@ -101,11 +111,18 @@ class Application(ttk.Frame):
self.appConfig.saveFile(filename)
def start(self, cfg_file='pygui.js'):
+ global USE_THREADS
# Load config
if cfg_file and os.path.exists(cfg_file):
self.appConfig.loadFile(cfg_file)
- self.appConfig.epConfig.uaConfig.threadCnt = 0;
+ if USE_THREADS:
+ self.appConfig.epConfig.uaConfig.threadCnt = 1
+ self.appConfig.epConfig.uaConfig.mainThreadOnly = False
+ else:
+ self.appConfig.epConfig.uaConfig.threadCnt = 0
+ self.appConfig.epConfig.uaConfig.mainThreadOnly = True
+ self.appConfig.epConfig.uaConfig.threadCnt = 0
self.appConfig.epConfig.uaConfig.mainThreadOnly = True
self.appConfig.epConfig.logConfig.writer = self.logger
self.appConfig.epConfig.logConfig.level = 5
@@ -136,7 +153,8 @@ class Application(ttk.Frame):
self.ep.libStart()
# Start polling
- self._onTimer()
+ if not USE_THREADS:
+ self._onTimer()
def updateAccount(self, acc):
if acc.deleting:
diff --git a/pjsip-apps/src/swig/python/Makefile b/pjsip-apps/src/swig/python/Makefile
index 651ea3f7..9417a207 100644
--- a/pjsip-apps/src/swig/python/Makefile
+++ b/pjsip-apps/src/swig/python/Makefile
@@ -8,7 +8,8 @@ else
GCC_EXE=
endif
-SWIG_FLAGS += -w312
+#USE_THREADS = -threads -DSWIG_NO_EXPORT_ITERATOR_METHODS
+SWIG_FLAGS += -w312 $(USE_THREADS)
.PHONY: all install uninstall
@@ -22,7 +23,7 @@ gcc.exe: cc_mingw.c
cp gcc.exe g++.exe
pjsua2_wrap.cpp: ../pjsua2.i ../symbols.i Makefile $(SRCS)
- swig $(SWIG_FLAGS) -python -o pjsua2_wrap.cpp ../pjsua2.i
+ swig $(SWIG_FLAGS) -python -o pjsua2_wrap.cpp ../pjsua2.i
clean distclean realclean:
rm -rf $(PYTHON_SO) pjsua2_wrap.cpp pjsua2_wrap.h pjsua2.py build *.pyc