[Cbc] Threadsafe usage of Cbc

Cornelius Riemenschneider cri at itscope.de
Tue Jan 14 07:32:55 EST 2014


Hello John,

I finally made it to test your fix.

I also modified callCbc with the attached patch, because the framework we use to drive cbc uses callCbc.

I now get a crash in ClpPackedMatrix::scale, with the following backtrace (only relevant lines included)

 

#4  0x00007f51494f5460 in JVM_handle_linux_signal (sig=11, info=0x7f510c9ff8f0, ucVoid=0x7f510c9ff7c0, 

    abort_if_unrecognized=1)

    at /home/jmm/jdk/openjdk-6-6b27-1.12.6/build/openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp:528

#5  <signal handler called>

#6  __memset_sse2 () at ../sysdeps/x86_64/multiarch/../memset.S:387

#7  0x00007f50fb5d428a in ClpPackedMatrix::scale(ClpModel*, ClpSimplex const*) const ()

   from /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so

#8  0x00007f50fb599809 in OsiClpSolverInterface::setSpecialOptions(unsigned int) ()

   from /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so

#9  0x00007f50fb3b5264 in CbcMain1(int, char const**, CbcModel&, int (*)(CbcModel*, int), CbcSolverUsefulData&)

    ()

   from /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so

#10 0x00007f50fb3d14a7 in callCbc1(char const*, CbcModel&, int (*)(CbcModel*, int)) ()

   from /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so

#11 0x00007f50fb3d1b54 in callCbc(char const*, CbcModel&) ()

   from /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so

#12 0x00007f50fb39c320 in operations_research::CBCInterface::Solve (this=0x7f511c0a5fe0, param=...)

    at src/linear_solver/cbc_interface.cc:378

#13 0x00007f50fb36d2e2 in operations_research::MPSolver::Solve (this=0x7f511f4dadf0, param=...)

    at src/linear_solver/linear_solver.cc:973

#14 0x00007f50fb36d25f in operations_research::MPSolver::Solve (this=0x7f511f4dadf0)

    at src/linear_solver/linear_solver.cc:961

#15 0x00007f50fb366c6f in Java_com_google_ortools_linearsolver_mainJNI_MPSolver_1solve_1_1SWIG_10 ()

   from /srv/itscope/liferay/jetty-7.5.4/work/jetty-0.0.0.0-8081-itscopeserver-portlet-_itscopeserver-portlet-any-/eclipse/configuration/org.eclipse.osgi/bundles/6/1/.cp/libjnilinearsolver.so

 

Do you have any idea about the crash?

If not, where should I start debugging the issue?

 

Regards,

Cornelius Riemenschneider

--

ITscope GmbH

Ludwig-Erhard-Allee 20

76131 Karlsruhe

Email: cornelius.riemenschneider at itscope.de

https://www.itscope.com

Handelsregister: AG Mannheim, HRB 232782

Sitz der Gesellschaft: Karlsruhe

Geschäftsführer: Alexander Münkel, Benjamin Mund, Stefan Reger


 

Von: john.forrest at fastercoin.com [mailto:cbc-bounces at list.coin-or.org] Im Auftrag von John Forrest
Gesendet: Mittwoch, 18. Dezember 2013 14:23
An: cbc at list.coin-or.org
Betreff: Re: [Cbc] Threadsafe usage of Cbc



 

Cornelius,

I have made some changes, which I hope will be enough for you.  I have done the minimum amount of work.

I don't think they can hurt anyone but as Ted Ralphs is preparing a new release, I will delay updating Cbc/stable/CbcSolver.?pp for a day or two.  If anyone wants to test the code I attach CbcSolver.?pp.

You need to compile with -DCBC_THREAD_SAFE.  The main thing this does is that Cbc only reads argv/argc type parameters in a crude threadsafe way.  You also need to use alternative versions of CbcMain0/1.

parallel.cpp has been added to Cbc/examples which is a simple example.

Please tell me if there are any problems.  Some lesser used Cgl cut generators may not be threadsafe, but I think the commonly used ones are.

John Forrest


On 17/12/13 15:11, Cornelius Riemenschneider wrote:


Hello,

we use CBC via googles or-tools from java in our application.

Compared to scientific problems, our problems are small and solved by Cbc in <1s (which is great!).

As we process requests from users concurrently, we?d also like to call Cbc concurrently.

Currently, this is impossible, because Cbc uses the static parameters array in CbcMain0 and CbcMain1 and thus crashes or reads incorrect parameters.

One backtrace, for example is:

 

#2 0x00007fb3435bf52b in __libc_message (do_abort=<optimized out>, fmt=<optimized out>) at ../sysdeps/unix/sysv/linux/libc_fatal.c:189
#3 0x00007fb3435c8d76 in malloc_printerr (action=3, str=0x7fb3436a1248 "double free or corruption (!prev)", ptr=<optimized out>) at malloc.c:6283
#4 0x00007fb3435cdaac in *__GI___libc_free (mem=<optimized out>) at malloc.c:3738
#5 0x00007fb342733f06 in std::string::assign(std::string const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007fb2d652cb7b in establishParams(int&, CbcOrClpParam*) () from libjnilinearsolver.so
#7 0x00007fb2d64edc3b in CbcMain0(CbcModel&) () from libjnilinearsolver.so
#8 0x00007fb2d6511bec in callCbc(char const*, CbcModel&) () from libjnilinearsolver.so
#9 0x00007fb2d64e3fce in operations_research::CBCInterface::Solve(operations_research::MPSolverParameters const&) () from libjnilinearsolver.so
#10 0x00007fb2d64cfe45 in operations_research::MPSolver::Solve(operations_research::MPSolverParameters const&) () from libjnilinearsolver.so
#11 0x00007fb2d64cff3b in operations_research::MPSolver::Solve() () from libjnilinearsolver.so
#12 0x00007fb2d64c91cf in Java_com_google_ortools_linearsolver_mainJNI_MPSolver_1solve_1_1SWIG_10 () from libjnilinearsolver.so

# from here on it?s just the JVM

 

As I don?t know the code and it?s hard to read, I can?t really fix the problem by myself,

but wouldn?t it be better to move parameters inside CbcModel instead of having a static array laying around?

 

Andi f that?s done (or another solution is found), do you know of any thread-safety issues in cbc?

Keep in mind, we don?t want Cbc to solve our problem in multiple threads, we just want to be able to solve different problems simultaneous.

 

Regards,

Cornelius Riemenschneider

--

ITscope GmbH

Ludwig-Erhard-Allee 20

76131 Karlsruhe

Email: cornelius.riemenschneider at itscope.de

https://www.itscope.com

Handelsregister: AG Mannheim, HRB 232782

Sitz der Gesellschaft: Karlsruhe

Geschäftsführer: Alexander Münkel, Benjamin Mund, Stefan Reger

 







_______________________________________________

Cbc mailing list

Cbc at list.coin-or.org

http://list.coin-or.org/mailman/listinfo/cbc

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/cbc/attachments/20140114/53d9037e/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cbc-callcbc-patch.patch
Type: application/octet-stream
Size: 590 bytes
Desc: not available
URL: <http://list.coin-or.org/pipermail/cbc/attachments/20140114/53d9037e/attachment-0001.obj>


More information about the Cbc mailing list