Apache OpenOffice (AOO) Bugzilla – Issue 116583
comphelper/qa/complex/comphelper failure
Last modified: 2017-05-20 10:47:37 UTC
At least on DEV300_m98 based CWS sb138, unxmacxi non-pro, executing comphelper/qa/complex/comphelper once failed at 2: 1) testEnumerations(complex.comphelper.Map) 2: com.sun.star.lang.DisposedException 2: at com.sun.star.lib.uno.environments.remote.JobQueue.removeJob(JobQueue.java:214) 2: at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:334) 2: at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:307) 2: at com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:91) 2: at com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:642) 2: at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:151) 2: at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:133) 2: at $Proxy11.put(Unknown Source) 2: at complex.comphelper.Map.testEnumerations(Map.java:493) with soffice.bin crashing at #8 0x916af2bb in _sigtramp () #9 0xffffffff in ?? () #10 0x0040a196 in comphelper::EnumerableMap::put () #11 0x0436cd22 in (anonymous namespace)::callVirtualMethod () #12 0x0436d0f0 in (anonymous namespace)::cpp_call () #13 0x0436d93f in bridges::cpp_uno::shared::unoInterfaceProxyDispatch () #14 0x18ea1bbc in binaryurp::IncomingRequest::execute_throw () #15 0x18ea2b07 in binaryurp::IncomingRequest::execute () #16 0x18ea5c19 in request () #17 0x00741658 in cppu_threadpool::JobQueue::enter () #18 0x00741e73 in cppu_threadpool::ORequestThread::run () #19 0x007421e8 in cppu_requestThreadWorker () #20 0x001ff23c in osl_thread_start_Impl () #21 0x91674155 in _pthread_start () #22 0x91674012 in thread_start () This looks like comphelper/source/container/enumerablemap.cxx has multithreading issues: In the Map.testEnumerations Test, local variables enumerateKeys/Values/All are first assigned to non-isolated MapEnumerations, then to isolated ones, so non-isolated MapEnumeration instances can be released now, with arbitrary timing. Releasing a non-isolated MapEnumeration invokes lcl_revokeMapModificationListener on a shared MapData::m_aModListeners. The following map.put("additional", "value") leads to a call to lcl_notifyMapDataListeners_nothrow, apparently iterating over the very MapData::m_aModListeners instance from which elements are removed simultaneously.
targeting to 3.x
Reset assigne to the default "issues@openoffice.apache.org".