From: | "Pegasus86" <Pegasus86(at)katamail(dot)com> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #2383: MessageBox Win32 API makes clients freeze |
Date: | 2006-04-08 16:18:51 |
Message-ID: | 200604081618.k38GIpdX049177@wwwmaster.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged online:
Bug reference: 2383
Logged by: Pegasus86
Email address: Pegasus86(at)katamail(dot)com
PostgreSQL version: 8.1.3
Operating system: Windows XP Professional
Description: MessageBox Win32 API makes clients freeze
Details:
I am working on a PC with AMD64 X2 processor, but 32-bit XP Professional.
I have created a db which contains a function linked to a C function
contained in a dll. This function should show a message box to the users.
The problem is that every client freezes when I call this function through
SQL commands.
I have tried PgAdminIII, psql AND clients, written by me in Delphi,
accessing PostgreSQL via ODBC.
To reproduce the problem, use Dev-Cpp 5 beta for Windows (using GCC) and
create a dll project (choose any name), choosing C as the language for the
project.
Now, you will have 2 files: one .c file, and .h file. These are the
contents:
/****************************************************
C FILE: I have called it "dllmain.c"
****************************************************/
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <libpq-fe.h>
DLLIMPORT void f1 (void)
{
/*Remember to grant access to user 'Postgres' to the file you want to
open! (in this case, C:/Test.txt */
FILE *fp = fopen("C:/Test.txt", "w");
if (!fp){
exit(1);
}
fprintf(fp, "Hello, World of C!!!");
fclose(fp);
}
DLLIMPORT void f2 (void)
{
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}
/*DllMain generated by Dev-Cpp*/
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being
called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
/************************************************
HEADER FILE: I have called it "dll.h"
************************************************/
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
DLLIMPORT void f1 (void);
DLLIMPORT void f2 (void);
#endif /* _DLL_H_ */
Now, simply build the DLL, and create two "C" functions in your database,
called f1 and f2, linking them to the corresponding function in the DLL.
Now, create the file "c:/Test.txt" (you can leave it empty) and run (from
any client):
"SELECT <schema-name>.f1()" --> it works!!! The file is written!
Now, run
"SELECT <schema-name>.f2()" ---> frozen!!!
And, last but not least, even wxPython, called trough "plpythonu" freezes
when I try to use its MessageBox() function!!!
Thanks
P.86
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2006-04-08 16:27:19 | Re: bug in windows xp |
Previous Message | Martijn van Oosterhout | 2006-04-08 13:14:49 | Re: bug in windows xp |