On 23.07.2018 18:21, Adriano dos Santos Fernandes wrote:
May be has nothing to do with Mark's problem, but inet.cpp/alloc_port
seems to have a race problem:
----------
if (!INET_initialized)
{
MutexLockGuard guard(init_mutex, FB_FUNCTION);
if (!INET_initialized)
{
...
INET_initialized = true;
// This should go AFTER 'INET_initialized = true' to avoid recursion
inet_async_receive = alloc_port(0);
inet_async_receive->port_flags |= PORT_server;
}
}
...
port->port_async_receive = inet_async_receive;
----------
Someone may pass the if (!INET_initialized) with INET_initialized ==
true, but inet_async_receive still being NULL.
This looks bad but luckily not so awful in fact. Async receive is used
only by network server and I see no way for it to allocate secondary
ports until completion of master port init. May be adding comment is
good idea...
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel