Yeah, so static local variables are dangerous with multiple threads. (This has apparently been in since revision 0, so we should probably look out for other similar assumptions in the code.
1 diff --git a/build-android/jni/Android.mk b/build-android/jni/Android.mk
2 --- a/build-android/jni/Android.mk
3 +++ b/build-android/jni/Android.mk
6 LOCAL_MODULE := pEpEngine
7 LOCAL_CFLAGS += -std=c99
9 +#LOCAL_CFLAGS += -fsanitize=address -fno-omit-frame-pointer
10 +#LOCAL_LDFLAGS += -fsanitize=address
11 +#LOCAL_ARM_MODE := arm
12 # from http://www.sqlite.org/android/finfo?name=jni/sqlite/Android.mk
13 # http://www.sqlite.org/android/artifact/e8ed354b3e58c835
16 $(GPGME_INCLUDE_PATH) \
17 $(LIBETPAN_PATH)/include
18 LOCAL_C_INCLUDES += $(GPGBUILD)/$(TARGET_ARCH_ABI)/app_opt/include
19 +LOCAL_C_INCLUDES += /home/huss/src/test/sequoia/openpgp-ffi/include
21 $(shell sh $(LOCAL_PATH)/../takeOutHeaderFiles.sh $(LOCAL_PATH)../../)
22 LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)../include
24 ASN1_SRC_FILES := $(wildcard $(LOCAL_PATH)/../../asn.1/*.c)
25 LOCAL_SRC_FILES := $(ENGINE_SRC_FILES:%=%) $(ASN1_SRC_FILES:$(LOCAL_PATH)/%=%)
27 +#LOCAL_ADDRESS_SANITIZER:=true
29 include $(BUILD_STATIC_LIBRARY)
30 diff --git a/src/pEpEngine.c b/src/pEpEngine.c
34 // N.B. If testing (so NDEBUG not defined) but this message is spam,
35 // put -D_PEP_SERVICE_LOG_OFF into CFLAGS/CXXFLAGS
36 #if !defined(NDEBUG) && !defined(_PEP_SERVICE_LOG_OFF)
37 - fprintf(stdout, "\n*** %s %s %s %s\n", title, entity, description, comment);
38 + __android_log_print(ANDROID_LOG_DEBUG, "pEpEngine", " %s :: %s :: %s :: %s ", title, entity, description, comment);
39 session->service_log = true;
42 diff --git a/sync/gen_dot.ysl2 b/sync/gen_dot.ysl2
43 --- a/sync/gen_dot.ysl2
44 +++ b/sync/gen_dot.ysl2
46 digraph finite_state_machine {
48 node [shape = doublecircle];
49 - `apply "state[@end='1']" mode=end`;
50 + `apply "state[@timeout='off']" mode=end`;
51 node [shape = circle];
53 `` apply "state" mode=do
54 diff --git a/sync/sync.fsm b/sync/sync.fsm
58 go HandshakingNewPhase2Second;
61 - state HandshakingNewPhase1First {
62 + state HandshakingNewPhase1First timeout=300 {
63 on Rollback if sameTransactionAndPartner {
70 - state HandshakingNewPhase1Second {
71 + state HandshakingNewPhase1Second timeout=300 {
72 on Rollback if sameTransactionAndPartner {
79 - state HandshakingNewPhase2First {
80 + state HandshakingNewPhase2First timeout=300 {
88 - state HandshakingNewPhase2Second {
89 + state HandshakingNewPhase2Second timeout=300 {