mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
func_odbc: Fix connection deadlock.
The func_odbc module was modified to ensure that the previous behavior of using a single database connection was maintained. This was done by getting a single database connection and holding on to it. With the new multiple connection support in res_odbc this will actually starve every other thread from getting access to the database as it also maintains the previous behavior of having only a single database connection. This change disables the func_odbc specific behavior if the res_odbc module is running with only a single database connection active. The connection is only kept for the duration of the request. ASTERISK-26177 #close Change-Id: I9bdbd8a300fb3233877735ad3fd07bce38115b7f
This commit is contained in:
@@ -744,6 +744,22 @@ static int aoro2_class_cb(void *obj, void *arg, int flags)
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned int ast_odbc_get_max_connections(const char *name)
|
||||
{
|
||||
struct odbc_class *class;
|
||||
unsigned int max_connections;
|
||||
|
||||
class = ao2_callback(class_container, 0, aoro2_class_cb, (char *) name);
|
||||
if (!class) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
max_connections = class->maxconnections;
|
||||
ao2_ref(class, -1);
|
||||
|
||||
return max_connections;
|
||||
}
|
||||
|
||||
/*
|
||||
* \brief Determine if the connection has died.
|
||||
*
|
||||
|
Reference in New Issue
Block a user