On 2015-06-02 03:07 PM, Lionel Elie Mamane wrote:
Hi,

I found a race condition between

1) connectivity::hsqldb::ODriverDelegator::flushConnections()
    (in file connectivity/source/drivers/hsqldb/HDriver.cxx around line 620)
    walking over m_aConnections

2) connectivity::hsqldb::ODriverDelegator::disposing()
    (same file around line 565)
    calling

         m_aConnections.clear();
         TWeakPairVector().swap(m_aConnections);

    which invalidates the iterators used by flushConnection()

Plus also probably, race condition between flushConnections() calling
flush() and disposing() disposing the underlying connection (although
this is probably handled correctly by the exception catching...).


I would suggest something like this in ODriverDelegator::flushConnections():

    take_mutex();
    std::vector<Connection> tmp = m_aConnections;
    release_mutex();
    for (Connection conn : tmp)
        conn.flush();

so that the mutex is not held during the problematic phase
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to