Add test to director guard using multiple threads.

Signed-off-by: Erez Geva <ErezGeva2@gmail.com>

Issue #2949
This commit is contained in:
Erez Geva 2024-07-04 17:52:19 +02:00 committed by William S Fulton
parent 4ef9f59b47
commit 3dfd65e1cd
3 changed files with 55 additions and 0 deletions

View File

@ -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(); }
};
%}

View File

@ -36,6 +36,7 @@ endif
CPP_TEST_CASES += \
callback \
complextest \
director_guard \
director_stl \
director_wstring \
file_test \

View File

@ -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()