Skip to content
This repository has been archived by the owner on Feb 9, 2024. It is now read-only.

Commit

Permalink
Gradle and Coroutines Upgrade + Autoreleasepool for Apple targets (#56)
Browse files Browse the repository at this point in the history
Manually managed threads on Apple platform require an autoreleasepool
  • Loading branch information
Ben Asher authored Jun 29, 2020
1 parent ee7d0ad commit 3cf6cd9
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 28 deletions.
20 changes: 14 additions & 6 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinNativeLink
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
import org.jetbrains.kotlin.konan.target.HostManager

val coroutinesVersion = "1.3.4"
val coroutinesVersion = "1.3.7"
val atomicfuVersion = "0.14.2"

plugins {
Expand Down Expand Up @@ -31,11 +31,11 @@ kotlin {

val nativeTargets = mutableListOf<KotlinNativeTarget>()

iosX64() { nativeTargets.add(this) }
iosArm64() { nativeTargets.add(this) }
iosArm32() { nativeTargets.add(this) }
macosX64() { nativeTargets.add(this) }
mingwX64() { nativeTargets.add(this) }
iosX64 { nativeTargets.add(this) }
iosArm64 { nativeTargets.add(this) }
iosArm32 { nativeTargets.add(this) }
macosX64 { nativeTargets.add(this) }
mingwX64 { nativeTargets.add(this) }

nativeTargets.forEach {
val main by it.compilations.getting {
Expand Down Expand Up @@ -76,6 +76,14 @@ kotlin {
dependsOn(commonTest)
}

val appleMain by creating

listOf("iosX64", "iosArm64", "iosArm32", "macosX64").forEach {
getByName("${it}Main") {
dependsOn(appleMain)
}
}

listOf("iosX64", "iosArm64", "iosArm32", "macosX64", "mingwX64").forEach {
getByName("${it}Main") {
dependsOn(nativeMain)
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
VERSION=0.5.0
VERSION=0.5.1
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
33 changes: 14 additions & 19 deletions gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
Expand Down Expand Up @@ -154,19 +154,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
i=`expr $i + 1`
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi

Expand All @@ -175,14 +175,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
APP_ARGS=`save "$@"`

# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"

# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi

exec "$JAVACMD" "$@"
3 changes: 3 additions & 0 deletions gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.autodesk.coroutineworker

internal actual inline fun <R> autoreleasepool(block: () -> R): R = kotlinx.cinterop.autoreleasepool(block)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.autodesk.coroutineworker

internal actual inline fun <R> autoreleasepool(block: () -> R): R = block()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.autodesk.coroutineworker

internal expect inline fun <R> autoreleasepool(block: () -> R): R
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,11 @@ actual class CoroutineWorker internal actual constructor() {
try {
repeatedlyCheckForCancellation(this.coroutineContext, cancelled) { completed }
// inside of a new CoroutineScope, so that child jobs are cancelled
coroutineScope(block)
coroutineScope {
autoreleasepool {
block()
}
}
} finally {
completed = true
notifyCompletion()
Expand Down

0 comments on commit 3cf6cd9

Please sign in to comment.