I am attempting to use the java bindings for dbus and am encountering a disconnecting problem. When I send a signal, the connection is disconnected with out given me much of a reason as to why. Part of the issue is it doesn't happen all the time, just when it feels like it. That's making it hard to reproduce. <br>


<br>So my main question: What are the possible reasons that a connection would decide to disconnect (other then hitting the DBusConnection.disconnect() method, which I confirmed is never being called in my code)? If I knew what could cause a disconnection, then it would narrow my search. <br>


<br>One unique aspect to my setup is that I'm sending multiple signals, each by its own thread. As far as I can tell, I've done this in a thread-safe manner. When the signals are sent, they are sent in a synchronized block. Here's a quick stream-lined glance at my class (Topic is a basic DBusInterface that only has a signal):<br>


<br>    public static class TestObserver implements Observer,Topic{    <br>        public TestObserver() throws DBusException{<br>            // some other stuff<br>            DBusConnection con=DBusConnection.getConnection(DBusConnection.SYSTEM);<br>


            synchronized (con) {<br>                con.exportObject("/"+getId(), this);<br>            }<br>        }<br><br>        @Override<br>        public void update(Observable observing, Object arg1) {<br>


            // some other stuff<br>            try {<br>                Topic.DataChanged signal=new Topic.DataChanged("/"+getId(), /*some other stuff*/);<br>                DBusConnection con=DBusConnection.getConnection(DBusConnection.SYSTEM);<br>


                synchronized (con) {<br>                    con.sendSignal(signal);        <br>                    <a href="http://logger.info" target="_blank">logger.info</a>("Thread "+Thread.currentThread().getId()+" sent signal "+getId()+" on con "+Arrays.toString(con.getNames()));            <br>


                }<br>            } catch (DBusException e) {<br>                e.printStackTrace();<br>            }<br>        }  <br>    }  <br><br><br>Is there something about using this java binding in a threaded environment that I'm missing? Are there some dbus-thread guidelines/safe practices? I'm not entirely sure my threaded environment and the disconnections are related (or at least my tests aren't showing that they are), but the very nature of threads makes it hard to know. My gut tells me they probably are related.<br>



<br>I recompiled my dbus jar with debug enabled and here is what is happening after I send the signal. As you can see it writes, then disconnects right after.<br>
<br>[org.freedesktop.dbus.AbstractConnection$_sender.run()] Got message: DataChanged(0,7) { Path=>..., Interface=>dbus.topics.Topic, Member=>DataChanged, Signature=>a{sv} } { { //the contents of my map//} }<br>



[org.freedesktop.dbus.Message.append()] Appending sig: a{sv} data: [{ //the contents of my map//}]<br>[org.freedesktop.dbus.MessageWriter.writeMessage()] <= DataChanged(0,7) { Path=>..., Interface=>dbus.topics.Topic, Member=>DataChanged, Signature=>a{sv} } { { //the contents of my map//} }<br>



[org.freedesktop.dbus.MessageWriter.writeMessage()] Writing all 102 buffers simultaneously to Unix Socket<br>[org.freedesktop.dbus.DBusConnection.disconnect()] Disconnecting DBusConnection<br><br>Any help on dbus disconnections and/or how to get it to tell me why it is disconnecting would be helpful.
<br><br>
-- <br>
Colby M. White<br>
<a href="tel:210.748.4077" value="+12107484077" target="_blank">210.748.4077</a><br><div></div><div></div><div></div><br>