From 3ff0018c2ea4ad5587c83c3b56cb9d98bf7f0255 Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Sun, 30 Sep 2007 17:50:56 +0000 Subject: [PATCH] In hopes of un-breaking the buildfarm, add missing file from ITAGAKI Takahiro's patch. --- src/interfaces/ecpg/test/thread/alloc.pgc | 89 +++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 src/interfaces/ecpg/test/thread/alloc.pgc 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 + -- GitLab