mirror of https://github.com/swig/swig
Add test to director guard using multiple threads.
Signed-off-by: Erez Geva <ErezGeva2@gmail.com> Issue #2949
This commit is contained in:
parent
4ef9f59b47
commit
3dfd65e1cd
|
@ -0,0 +1,22 @@
|
|||
%module(directors="1", threads) director_guard;
|
||||
|
||||
%feature("director") Callback;
|
||||
|
||||
%inline %{
|
||||
|
||||
class Callback {
|
||||
public:
|
||||
virtual const char *run() const { return "tst1"; }
|
||||
virtual ~Callback() {}
|
||||
|
||||
};
|
||||
|
||||
class Caller {
|
||||
private:
|
||||
Callback *_callback;
|
||||
public:
|
||||
Caller(Callback *cb): _callback(cb) { }
|
||||
const char *call() { return _callback->run(); }
|
||||
};
|
||||
|
||||
%}
|
|
@ -36,6 +36,7 @@ endif
|
|||
CPP_TEST_CASES += \
|
||||
callback \
|
||||
complextest \
|
||||
director_guard \
|
||||
director_stl \
|
||||
director_wstring \
|
||||
file_test \
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
import director_guard
|
||||
import threading
|
||||
import time
|
||||
|
||||
str2 = "tst2"
|
||||
|
||||
class MinCallback(director_guard.Callback):
|
||||
def run(self):
|
||||
return str2
|
||||
|
||||
class CallThread(threading.Thread):
|
||||
def __init__(self, caller):
|
||||
super(CallThread, self).__init__()
|
||||
self.caller = caller
|
||||
|
||||
def run(self):
|
||||
for x in range(100):
|
||||
if self.caller.call() != "tst2":
|
||||
raise RuntimeError("Should return true")
|
||||
time.sleep(0.001) # 1 millisecond
|
||||
|
||||
callback = MinCallback()
|
||||
caller = director_guard.Caller(callback)
|
||||
threads = [ ]
|
||||
for x in range(10):
|
||||
threads.append(CallThread(caller))
|
||||
|
||||
for t in threads:
|
||||
t.start()
|
||||
|
||||
for t in threads:
|
||||
t.join()
|
Loading…
Reference in New Issue