Author: Armin Rigo <[email protected]>
Branch:
Changeset: r976:5e05b2936988
Date: 2012-09-27 11:07 +0200
http://bitbucket.org/cffi/cffi/changeset/5e05b2936988/
Log: Added a test for caae153920ef.
diff --git a/testing/callback_in_thread.py b/testing/callback_in_thread.py
new file mode 100644
--- /dev/null
+++ b/testing/callback_in_thread.py
@@ -0,0 +1,40 @@
+import time
+from cffi import FFI
+
+def _run_callback_in_thread():
+ ffi = FFI()
+ ffi.cdef("""
+ typedef int (*mycallback_func_t)(int, int);
+ int threaded_ballback_test(mycallback_func_t mycb);
+ """)
+ lib = ffi.verify("""
+ #include <pthread.h>
+ typedef int (*mycallback_func_t)(int, int);
+ void *my_wait_function(void *ptr) {
+ mycallback_func_t cbfunc = (mycallback_func_t)ptr;
+ cbfunc(10, 10);
+ cbfunc(12, 15);
+ return NULL;
+ }
+ int threaded_ballback_test(mycallback_func_t mycb) {
+ pthread_t thread;
+ pthread_create(&thread, NULL, my_wait_function, (void*)mycb);
+ return 0;
+ }
+ """, extra_compile_args=['-pthread'])
+ seen = []
+ @ffi.callback('int(*)(int,int)')
+ def mycallback(x, y):
+ seen.append((x, y))
+ return 0
+ lib.threaded_ballback_test(mycallback)
+ count = 300
+ while len(seen) != 2:
+ time.sleep(0.01)
+ count -= 1
+ assert count > 0, "timeout"
+ assert seen == [(10, 10), (12, 15)]
+
+print 'STARTING'
+_run_callback_in_thread()
+print 'DONE'
diff --git a/testing/test_verify.py b/testing/test_verify.py
--- a/testing/test_verify.py
+++ b/testing/test_verify.py
@@ -1179,3 +1179,11 @@
assert res2.x == 32
assert res2.y == 18
py.test.raises(TypeError, lib.sum_coord, res2)
+
+def test_callback_in_thread():
+ if sys.platform == 'win32':
+ py.test.skip("pthread only")
+ import subprocess
+ g = subprocess.Popen([sys.executable, 'callback_in_thread.py'])
+ result = g.wait()
+ assert result == 0
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit