# DO NOT DELETE THIS LINE -- make depend depends on it.
-arch/async_posix.o: ../../include/openssl/async.h
+arch/async_posix.o: ../../e_os.h ../../include/openssl/async.h
arch/async_posix.o: ../../include/openssl/crypto.h
arch/async_posix.o: ../../include/openssl/e_os2.h
arch/async_posix.o: ../../include/openssl/opensslconf.h
arch/async_posix.o: arch/../async_locl.h arch/async_posix.c
arch/async_win.o: ../../include/openssl/async.h arch/async_win.c
arch/async_win.o: arch/async_win.h
-async.o: ../../include/openssl/async.h ../../include/openssl/crypto.h
-async.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
-async.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
-async.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
-async.o: ../../include/openssl/symhacks.h arch/async_null.h arch/async_posix.h
-async.o: arch/async_win.h async.c async_locl.h
+async.o: ../../e_os.h ../../include/openssl/async.h
+async.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
+async.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+async.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
+async.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
+async.o: arch/async_null.h arch/async_posix.h arch/async_win.h async.c
+async.o: async_locl.h
# define ASYNC_ARCH
# include <ucontext.h>
+# include <setjmp.h>
+# include "e_os.h"
extern __thread ASYNC_CTX *sysvctx;
typedef struct async_fibre_st {
ucontext_t fibre;
+ jmp_buf env;
+ int env_init;
} ASYNC_FIBRE;
# define ASYNC_set_ctx(nctx) (sysvctx = (nctx))
# define ASYNC_get_ctx() (sysvctx)
-# define ASYNC_FIBRE_swapcontext(o,n,r) \
- ((r)? \
- !swapcontext(&(o)->fibre, &(n)->fibre) \
- : \
- !setcontext(&(n)->fibre))
+
+static inline int ASYNC_FIBRE_swapcontext(ASYNC_FIBRE *o, ASYNC_FIBRE *n, int r)
+{
+ o->env_init = 1;
+
+ if (!r || !setjmp(o->env)) {
+ if (n->env_init)
+ longjmp(n->env, 1);
+ else
+ setcontext(&n->fibre);
+ }
+
+ return 1;
+}
+
# define ASYNC_FIBRE_makecontext(c) \
(ASYNC_FIBRE_init(c) \
&& !getcontext(&(c)->fibre) \
TS_CONF_set_signer_digest 5011 EXIST::FUNCTION:
ENGINE_load_dasync 5012 EXIST::FUNCTION:ENGINE,STATIC_ENGINE
ASYNC_pause_job 5013 EXIST::FUNCTION:
-ASYNC_job_is_waiting 5014 EXIST::FUNCTION:
+ASYNC_job_is_waiting 5014 NOEXIST::FUNCTION:
ASYNC_in_job 5015 EXIST::FUNCTION:
ASYNC_start_job 5016 EXIST::FUNCTION: