Hmmmm, the links seem to imply that the answer to my question is that
you were talking to me and code at my level should be calling
IoConnector.dispose() as part of my clean up for each discovery.
So I put that code in. But it had no visible impact.
So I added debug logging to ensure I had placed the code properly and it
was in the execution chain properly. I see the debug line between
each discovery attempt -- the log line is right before the dispose()
call. And still each discovery attempt leaves two more running
threads than the one before it.
Not taking the code out, because it certainly seems the right thing to
do even if it didn't fix the immediate problem.... but it didn't fix
the immediate problem. :-(
boB
Maarten Bosteels wrote:
The dispose method is analogous to the close method on java.io.OutputStream
http://java.sun.com/j2se/1.5.0/docs/api/java/io/OutputStream.html#close()
http://java.sun.com/j2se/1.5.0/docs/api/java/io/Closeable.html
see also http://www.javapractices.com/topic/TopicAction.do?Id=24
regards,
Maarten
On Tue, May 5, 2009 at 9:06 PM, boB Gage <[email protected]> wrote:
I didn't dispose it??? Or Emmanuel didn't?? :-)
As I understand, Java's GC should happen automagically once I stop
referencing the old IoConnector object. So, I am re-setting the same
variable to a new one without doing anything special to dispose of the old
one.
Isn't that the Java way??
boB
Julien Vermillard wrote:
Le Thu, 30 Apr 2009 22:03:46 +0200,
Emmanuel Lecharny <[email protected]> a écrit :
boB Gage wrote:
Emmanuel,
That's kind of how the original C++ code that I'm porting worked...
The various devices we use each have their own serial parameters (baud,
stop/start/partity bits et al) so all have their own SerialAddress objects
to open & close. Each device handler (ie
our code) has it's own codec factory -- so there's not a single
shared one for all the devices to be discovered (that would be way
too unwieldy for words).
I've tried re-using IoConnector objects and just change handlers,
but the IoConnector.setHandler() method (IoService.java) complains
bitterly if I assign a new handler to an existing connection.
I would have kept the same handler, just switched the codec. Creating
a new NioConnector is quite expensive.
I have eliminated the synchronized clauses as a source, and had my Java
understanding expanded in the process. :-) One of the two unbound threads
*is* caught in that quoted wait() call however. Perhaps because we failed
to flush a failed session before closing it??? [ the notify is in a flush ]
Hmmmm... Without the code, it's difficult to say. Also, it's now 3
weeks I didn't looked at the code, so I can't give you an decent
advice atm...
I think you didn't disposed (connector.dispose();) the old NioConnector.
Julien
--
boB Gage
Software Engineer
Merge Healthcare
This message is a PRIVATE communication. This message and all
attachments are a private communication and may be confidential or
protected by privilege. If you are not the intended recipient, you are
hereby notified that any disclosure, copying, distribution or use of the
information contained in or attached to this message is strictly
prohibited. Please notify the sender of the delivery error by replying
to this message, and then delete it from your system. Thank you.
--
boB Gage
Software Engineer
Merge Healthcare
This message is a PRIVATE communication. This message and all
attachments are a private communication and may be confidential or
protected by privilege. If you are not the intended recipient, you are
hereby notified that any disclosure, copying, distribution or use of the
information contained in or attached to this message is strictly
prohibited. Please notify the sender of the delivery error by replying
to this message, and then delete it from your system. Thank you.