Hello Frank,If the join causes a deadlock, that means that the thread would 
never end even if there were not the join, which is not good anyway. So if this 
deadlock exists, the problem is maybe located in the code of the worker 
thread.Thomas



------ Message d'origine------De: Frank FockDate: mer., 27 mai 2015 09:08À: 
Thomas L;Cc: [email protected];Objet :Re: [SNMP4J] BindException: Address 
already in use, even with reuseAddress=true (with proposed fix)
Hello Thomas,I will try find a solution. However, other users reported the 
deadlock occurring on some operating systems when the join was made. The 
problem is, that you cannot be sure that the worker thread is already at the io 
wait. But you are right, the socket close should anyway terminate the 
thread...Best regards Frank> Am 27.05.2015 um 07:31 schrieb Thomas L :> > Hello 
Frank,> > Thank you for your answer.> Setting a socket timeout is not something 
I would like to do, because you have the choice between using a small value and 
wasting CPU time, or setting a large value and waiting a long time for the 
close method to complete. I do not want either.> My solution seems completly 
safe: just do a join at the end of DefaultUdpTransportMapping.close(), after 
the socket has been closed. The worker thread is then already terminating, I 
just want the close method to wait a few ms just to be sure that when we exit 
the close method it is safe to immediatly try to rebind on the same port. I do 
not see any possible deadlock here.> > Regards,> Thomas> >> Le 27 mai 2015 à 
00:07, Frank Fock  a écrit :>> >> Hi Thomas,>> >> If you set the socket timeout 
to a value >0 (which is recommended), then>> the worker thread is joined on the 
close().>> If the timeout is 0, no join is performed because otherwise a 
deadlock would occur>> if the interrupt call is triggered by the close() method 
while the worker thread>> is not in the select method (i.e., waiting on IO).>> 
>> Thus, I would not change the existing code.>> >> Best regards,>> Frank>> >>> 
Am 26.05.2015 um 22:13 schrieb Thomas L:>>> Hello,>>> >>> I think I have found 
a bug in SNMP4J (2.3.3) where we can have a "BindException: Address already in 
use" exception when creating a DefaultUdpTransportMapping, whereas 
reuseAddress=true, if we have previously created and closed a similar 
DefaultUdpTransportMapping.>>> In DefaultUdpTransportMapping.close(), the 
listener thread (WorkerTask) is not "joined", so it can still use the UDP port 
for some time, and creating a new DefaultUdpTransportMapping on the same port, 
even if reuseAddress=true, is not possible.>>> My current dirty workaround is 
to access the "WorkerTask" field by reflection just before closing the Snmp 
object, and then calling "join()" on the object, so I am sure the thread is 
correctly terminated before any new attempt to create a new 
DefaultUdpTransportMapping.>>> >>> Can this problem be solved in the next 
version of SNM4J?>>> >>> Regards,>>> Thomas>>> 
_______________________________________________>>> SNMP4J mailing list>>> 
[email protected]>>> https://oosnmp.net/mailman/listinfo/snmp4j>> >> -- >> 
--->> AGENT++>> Maximilian-Kolbe-Str. 10>> 73257 Koengen, Germany>> 
https://agentpp.com>> Phone: +49 7024 8688230>> Fax:   +49 7024 8688231>> >> 
_______________________________________________>> SNMP4J mailing list>> 
[email protected]>> https://oosnmp.net/mailman/listinfo/snmp4j

_______________________________________________
SNMP4J mailing list
[email protected]
https://oosnmp.net/mailman/listinfo/snmp4j

Reply via email to