diff options
author | Tom Lane | 2007-09-30 17:50:56 +0000 |
---|---|---|
committer | Tom Lane | 2007-09-30 17:50:56 +0000 |
commit | 3ff0018c2ea4ad5587c83c3b56cb9d98bf7f0255 (patch) | |
tree | 99a82e2fa675a7c2aafb2c9359d379b2643b7c30 | |
parent | ab051bd2938feb8fcbbad6a4c9d97a69d7ec87a6 (diff) |
In hopes of un-breaking the buildfarm, add missing file from
ITAGAKI Takahiro's patch.
-rw-r--r-- | src/interfaces/ecpg/test/thread/alloc.pgc | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/interfaces/ecpg/test/thread/alloc.pgc b/src/interfaces/ecpg/test/thread/alloc.pgc new file mode 100644 index 00000000000..d4850dcd884 --- /dev/null +++ b/src/interfaces/ecpg/test/thread/alloc.pgc @@ -0,0 +1,89 @@ +#include <stdlib.h> +#include "ecpg_config.h" + +#ifndef ENABLE_THREAD_SAFETY +int +main(void) +{ + printf("No threading enabled.\n"); + return 0; +} +#else +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <process.h> +#else +#include <pthread.h> +#endif +#include <stdio.h> + +#define THREADS 16 +#define REPEATS 50 + +exec sql include sqlca; +exec sql include ../regression; + +exec sql whenever sqlerror sqlprint; +exec sql whenever not found sqlprint; + +#ifdef WIN32 +static unsigned STDCALL fn(void* arg) +#else +static void* fn(void* arg) +#endif +{ + int i; + + EXEC SQL BEGIN DECLARE SECTION; + int value; + char name[100]; + char **r = NULL; + EXEC SQL END DECLARE SECTION; + + value = (int)arg; + sprintf(name, "Connection: %d", value); + + EXEC SQL CONNECT TO REGRESSDB1 AS :name; + EXEC SQL SET AUTOCOMMIT TO ON; + for (i = 1; i <= REPEATS; ++i) + { + EXEC SQL SELECT relname INTO :r FROM pg_class WHERE relname = 'pg_class'; + free(r); + r = NULL; + } + EXEC SQL DISCONNECT :name; + + return 0; +} + +int main (int argc, char** argv) +{ + int i; +#ifdef WIN32 + HANDLE threads[THREADS]; +#else + pthread_t threads[THREADS]; +#endif + +#ifdef WIN32 + for (i = 0; i < THREADS; ++i) + { + unsigned id; + threads[i] = (HANDLE)_beginthreadex(NULL, 0, fn, (void*)i, 0, &id); + } + + WaitForMultipleObjects(THREADS, threads, TRUE, INFINITE); + for (i = 0; i < THREADS; ++i) + CloseHandle(threads[i]); +#else + for (i = 0; i < THREADS; ++i) + pthread_create(&threads[i], NULL, fn, (void*)i); + for (i = 0; i < THREADS; ++i) + pthread_join(threads[i], NULL); +#endif + + return 0; +} +#endif + |