File tree Expand file tree Collapse file tree 1 file changed +17
-10
lines changed Expand file tree Collapse file tree 1 file changed +17
-10
lines changed Original file line number Diff line number Diff line change @@ -55,21 +55,28 @@ private Cleaner() {
5555 referenceQueue = new ReferenceQueue <>();
5656 }
5757
58- public synchronized Cleanable register (final Object obj , final Runnable cleanupTask ) {
58+ public Cleanable register (final Object obj , final Runnable cleanupTask ) {
5959 // The important side effect is the PhantomReference, that is yielded after the referent is GCed
6060 final CleanerRef ref = new CleanerRef (obj , referenceQueue , cleanupTask );
6161
62- if (firstCleanable != null ) {
63- ref .setNext (firstCleanable );
64- firstCleanable .setPrevious (ref );
62+ synchronized (this ) {
63+ if (firstCleanable != null ) {
64+ ref .setNext (firstCleanable );
65+ firstCleanable .setPrevious (ref );
66+ }
67+ firstCleanable = ref ;
68+
69+ if (!cleanerRunning ) {
70+ logger .log (Level .FINE , "Starting CleanerThread" );
71+ Thread cleanerThread = new CleanerThread ();
72+ cleanerThread .start ();
73+ cleanerRunning = true ;
74+ }
6575 }
66- firstCleanable = ref ;
6776
68- if (!cleanerRunning ) {
69- logger .log (Level .FINE , "Starting CleanerThread" );
70- Thread cleanerThread = new CleanerThread ();
71- cleanerThread .start ();
72- cleanerRunning = true ;
77+ // Ensure that obj is referencable past the enqueue point.
78+ if (obj == null ) {
79+ throw new IllegalArgumentException ("Cleaner object cannot be null" );
7380 }
7481
7582 return ref ;
You can’t perform that action at this time.
0 commit comments