vpx_once: implement once() for OS/2 Change-Id: I9f736f299490464bbdbb6cd24ee6f5b46ad45ec6
diff --git a/vpx_ports/vpx_once.h b/vpx_ports/vpx_once.h index 182892a..bd9eebd 100644 --- a/vpx_ports/vpx_once.h +++ b/vpx_ports/vpx_once.h
@@ -73,6 +73,33 @@ } +#elif CONFIG_MULTITHREAD && defined(__OS2__) +#define INCL_DOS +#include <os2.h> +static void once(void (*func)(void)) +{ + static int done; + + /* If the initialization is complete, return early. */ + if(done) + return; + + /* Causes all other threads in the process to block themselves + * and give up their time slice. + */ + DosEnterCritSec(); + + if (!done) + { + func(); + done = 1; + } + + /* Restores normal thread dispatching for the current process. */ + DosExitCritSec(); +} + + #elif CONFIG_MULTITHREAD && HAVE_PTHREAD_H #include <pthread.h> static void once(void (*func)(void))