@@ -14,6 +14,7 @@ import java.io.FileOutputStream
1414import java.io.IOException
1515import java.io.InputStreamReader
1616import java.util.concurrent.TimeUnit
17+ import java.util.concurrent.atomic.AtomicReference
1718import java.util.concurrent.locks.ReentrantLock
1819import kotlin.concurrent.withLock
1920
@@ -42,7 +43,7 @@ class BuildEnvironment(private val context: Context, private val rootfs: String,
4243
4344 private val accessLock = ReentrantLock ()
4445 private val accessLockCondition = accessLock.newCondition()
45- @Volatile private var grantedTreeUri: Uri ? = null
46+ private val grantedTreeUri = AtomicReference < Uri >()
4647
4748 private fun getDefaultEnv (): List <String > {
4849 return try {
@@ -187,7 +188,7 @@ class BuildEnvironment(private val context: Context, private val rootfs: String,
187188 }
188189
189190 var projectTreeUri = FileUtils .getProjectTreeUri(context, projectPath)
190- if (projectTreeUri == null ) {
191+ if (projectTreeUri == null || ! FileUtils .isProjectTreeUriPersisted(context, projectTreeUri) ) {
191192 val notificationPerm = checkSelfPermission(context, Manifest .permission.POST_NOTIFICATIONS )
192193 if (notificationPerm == PackageManager .PERMISSION_GRANTED ) {
193194 outputHandler(
@@ -504,20 +505,22 @@ class BuildEnvironment(private val context: Context, private val rootfs: String,
504505 fun waitForDirectoryAccess (timeoutMs : Long ): Uri ? {
505506 accessLock.withLock {
506507 var remainingTimeInNanos = TimeUnit .MILLISECONDS .toNanos(timeoutMs)
507- while (grantedTreeUri == null && remainingTimeInNanos > 0 ) {
508+ while (grantedTreeUri.get() == null && remainingTimeInNanos > 0 ) {
508509 try {
509510 remainingTimeInNanos = accessLockCondition.awaitNanos(remainingTimeInNanos)
510511 } catch (_: InterruptedException ) {
511512 Thread .currentThread().interrupt()
512513 }
513514 }
514- return grantedTreeUri
515+ // We reset the value to `null` after returning it to avoid returning a previous value when this method is
516+ // invoked again.
517+ return grantedTreeUri.getAndSet(null )
515518 }
516519 }
517520
518521 fun onDirectoryAccessGranted (uri : Uri ) {
519522 accessLock.withLock {
520- grantedTreeUri = uri
523+ grantedTreeUri.set( uri)
521524 accessLockCondition.signalAll()
522525 }
523526 }
0 commit comments