Subject Re: [firebird-support] Is Embedded Firebird 1.5.1 thread safe
Author Helen Borrie
At 08:32 AM 18/10/2004 +0000, you wrote:



>Dear All,
>
>According to the latest Firebird documentation about Embedded Server,
>
>"Client access can be only via the local protocol, i.e. NOT a TCP/IP
>connection string that includes the server name "localhost" or IP
>address 127.0.0.1"
>
>Does this mean the embedded server is not thread safe? Say if I am
>using kbmMW-based application server to access the database using the
>embedded dll, I may face data corruption under multi-concurrent-user
>environment?

It doesn't mean this at all. It means that you can't use TCP/IP local
loopback to connect to a database through the embedded server. You have to
use the IPServer "local connect" protocol because that's how the embedded
client/server model works. IPServer is a hack: the server and the client
share the same inter-process communication space. Threads have a habit of
walking all over space that other threads are using.

Let's get clear about this. Embedded server is specifically NOT for
multi-user use. If you have an application connected to the embedded
server, the database file will be exclusively locked and no other clients
will be able to connect to that database through a full server that's also
running on the same machine.

I don't know what "kbmMW-based" means. If it's some kind of web-server
framework that needs to make multiple connections to the same database, you
need a full database server. If you want a compact server installation for
this purpose, use the Classic server.

Embedded on Windows is being rewritten for Firebird 2, to use the XNET
framework instead of IPServer. From the very very little I know about
XNET, it is a much safer, POSIX-compliant and more thread-friendly
environment for local connections, i.e. a properly-designed subsystem, not
a desktop hack.

./hb