18
18
*/
19
19
package org .neo4j .driver .internal ;
20
20
21
- import java .util .concurrent .locks . ReentrantReadWriteLock ;
21
+ import java .util .concurrent .atomic . AtomicBoolean ;
22
22
23
23
import org .neo4j .driver .internal .security .SecurityPlan ;
24
24
import org .neo4j .driver .v1 .AccessMode ;
@@ -34,8 +34,7 @@ abstract class BaseDriver implements Driver
34
34
private final SecurityPlan securityPlan ;
35
35
protected final Logger log ;
36
36
37
- private final ReentrantReadWriteLock closedLock = new ReentrantReadWriteLock ();
38
- private boolean closed ;
37
+ private AtomicBoolean closed = new AtomicBoolean ( false );
39
38
40
39
BaseDriver ( SecurityPlan securityPlan , Logging logging )
41
40
{
@@ -46,16 +45,8 @@ abstract class BaseDriver implements Driver
46
45
@ Override
47
46
public final boolean isEncrypted ()
48
47
{
49
- closedLock .readLock ().lock ();
50
- try
51
- {
52
- assertOpen ();
53
- return securityPlan .requiresEncryption ();
54
- }
55
- finally
56
- {
57
- closedLock .readLock ().unlock ();
58
- }
48
+ assertOpen ();
49
+ return securityPlan .requiresEncryption ();
59
50
}
60
51
61
52
@ Override
@@ -67,33 +58,16 @@ public final Session session()
67
58
@ Override
68
59
public final Session session ( AccessMode mode )
69
60
{
70
- closedLock .readLock ().lock ();
71
- try
72
- {
73
- assertOpen ();
74
- return newSessionWithMode ( mode );
75
- }
76
- finally
77
- {
78
- closedLock .readLock ().unlock ();
79
- }
61
+ assertOpen ();
62
+ return newSessionWithMode ( mode );
80
63
}
81
64
82
65
@ Override
83
66
public final void close ()
84
67
{
85
- closedLock .writeLock ().lock ();
86
- try
87
- {
88
- if ( !closed )
89
- {
90
- closeResources ();
91
- }
92
- }
93
- finally
68
+ if ( closed .compareAndSet (false , true ) )
94
69
{
95
- closed = true ;
96
- closedLock .writeLock ().unlock ();
70
+ closeResources ();
97
71
}
98
72
}
99
73
@@ -103,7 +77,7 @@ public final void close()
103
77
104
78
private void assertOpen ()
105
79
{
106
- if ( closed )
80
+ if ( closed . get () )
107
81
{
108
82
throw new IllegalStateException ( "This driver instance has already been closed" );
109
83
}
0 commit comments