File tree 2 files changed +19
-10
lines changed
src/main/java/org/apache/camel/component/dataprovider
2 files changed +19
-10
lines changed Original file line number Diff line number Diff line change 5
5
<modelVersion >4.0.0</modelVersion >
6
6
<groupId >org.apache.camel</groupId >
7
7
<artifactId >camel-data-provider</artifactId >
8
- <version >1.0.5 </version >
8
+ <version >1.0.6 </version >
9
9
10
10
<packaging >jar</packaging >
11
11
Original file line number Diff line number Diff line change @@ -20,6 +20,7 @@ public abstract class LazyDataProvider<T> implements IDataProvider<T> {
20
20
private final ReentrantReadWriteLock dataLock = new ReentrantReadWriteLock ();
21
21
private final Lock readDataLock = dataLock .readLock ();
22
22
private final Lock writeDataLock = dataLock .writeLock ();
23
+ private volatile boolean dataLoaded ;
23
24
24
25
private ImmutableList <T > data ;
25
26
@@ -34,16 +35,24 @@ public abstract class LazyDataProvider<T> implements IDataProvider<T> {
34
35
public abstract Iterable <T > loadData ();
35
36
36
37
private void ensureDataLoaded () {
37
- LockUtils .runWithLock (writeDataLock , () -> {
38
- if (data == null ) {
39
- Iterable <T > data = loadData ();
40
- if (data instanceof ImmutableList ) {
41
- this .data = (ImmutableList <T >) data ;
42
- } else {
43
- this .data = ImmutableList .copyOf (data );
44
- }
38
+ readDataLock .lock ();
39
+ try {
40
+ if (dataLoaded == false ) {
41
+ readDataLock .unlock ();
42
+ LockUtils .runWithLock (this .writeDataLock , () -> {
43
+ Iterable <T > data = this .loadData ();
44
+ if (data instanceof ImmutableList ) {
45
+ this .data = (ImmutableList ) data ;
46
+ } else {
47
+ this .data = ImmutableList .copyOf (data );
48
+ }
49
+ dataLoaded = true ;
50
+ readDataLock .lock ();
51
+ });
45
52
}
46
- });
53
+ } finally {
54
+ readDataLock .unlock ();
55
+ }
47
56
}
48
57
49
58
@ Override
You can’t perform that action at this time.
0 commit comments