etcd4j icon indicating copy to clipboard operation
etcd4j copied to clipboard

fix the concurrent problem of handlers in ResponsePromise

Open mashirofang opened this issue 5 years ago • 4 comments

#187 just using a lock to control the concurrent operations

mashirofang avatar Jun 26 '19 13:06 mashirofang

maybe we just need a CopyOnWriteList instead of the lock/unlock

lburgazzoli avatar Jun 26 '19 13:06 lburgazzoli

ok , I would conside this better way tomorrow, and commit a new version

mashirofang avatar Jun 26 '19 13:06 mashirofang

maybe we just need a CopyOnWriteList instead of the lock/unlock

I think only using CopyOnWriteList may not solve the problem. In this case we won't have any ConcurrentModificationException , but anothor problem might happen that the handler we want to add might be invoked twice both in event-group-thread and user-defined-thread (in a very low probability we addListener just after event-group-thread sets success/exception and before gets iterator of the list to loop ) . So methods such as "addListener" , "handlePromise" and "setException" must be invoked atomicity . Lock/unlock can solve the probleam , but may not good enough , I would spend more time to think it over.

mashirofang avatar Jun 27 '19 06:06 mashirofang

@lburgazzoli Hello , I'd thought a lot ,but didn't finger out anyway better than lock/unlock . ReentrantLock is an cas operation , also used in CopyOnWriteList and I use it the same way to control concurrent cases .Anyhow I commit a new version that adjusts some code to reduse the area of the lock .

mashirofang avatar Jun 27 '19 10:06 mashirofang