Archived

This forum has been archived. Please start a new discussion on GitHub.

Can we acquire the ICE mutex explicitly to enforce ordering

We have a legacy construct in our code from back in the day in ICE 2.x when there was a thread per connection instead of a threadpool. I don't know if that changed mutex behavior in ICE, or if we have always been exposed. We have a deadlock during unexpected disconnects. Incoming Ice invocations have an ICE lock and attempt to acquire a domain lock while a cleanup thread has the domain lock and attempts to make an outbound ICE invocation.

This code needs to be redesigned, however we're considering options for a low risk short term fix.

Is it possible to grab the ICE lock on our thread that makes the outbound invocation explicitly, such that we can acquire it before our domain lock to avoid the deadlock?

Comments

  • bernard
    bernard Jupiter, FL

    Hi Greg,

    Could you post or email us your stack trace with this deadlock, so that we can understand better the issue?

    Also, which version of Ice are you using? I assume it's Ice C++?

    Best regards,
    Bernard

  • Bernard, we are using 3.7.2+ ( for IceLiveSocket ) C++98 API. I'll send a stack trace to you and support in an email.