Skip to content

Commit 45d53f9

Browse files
committed
different source sets
1 parent 1e8d73e commit 45d53f9

File tree

3 files changed

+117
-0
lines changed

3 files changed

+117
-0
lines changed

sqliter-driver/build.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@ kotlin {
8181
val mingwMain = sourceSets.maybeCreate("mingwMain").apply {
8282
dependsOn(nativeCommonMain)
8383
}
84+
85+
val mingwX64Main = sourceSets.maybeCreate("mingwX64Main").apply {
86+
dependsOn(mingwMain)
87+
}
88+
89+
val mingwX86Main = sourceSets.maybeCreate("mingwX86Main").apply {
90+
dependsOn(mingwMain)
91+
}
92+
8493
knTargets.forEach { target ->
8594
when {
8695
target.name.startsWith("mingw") -> {
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package co.touchlab.sqliter.concurrency
2+
3+
import kotlinx.cinterop.Arena
4+
import kotlinx.cinterop.alloc
5+
import kotlinx.cinterop.ptr
6+
import platform.posix.PTHREAD_MUTEX_RECURSIVE
7+
import platform.posix.pthread_mutex_destroy
8+
import platform.posix.pthread_mutex_init
9+
import platform.posix.pthread_mutex_lock
10+
import platform.posix.pthread_mutex_tVar
11+
import platform.posix.pthread_mutex_trylock
12+
import platform.posix.pthread_mutex_unlock
13+
import platform.posix.pthread_mutexattr_destroy
14+
import platform.posix.pthread_mutexattr_init
15+
import platform.posix.pthread_mutexattr_settype
16+
import platform.posix.pthread_mutexattr_tVar
17+
import kotlin.native.concurrent.freeze
18+
19+
/**
20+
* A simple lock.
21+
* Implementations of this class should be re-entrant.
22+
*/
23+
actual class Lock actual constructor() {
24+
private val arena = Arena()
25+
private val attr = arena.alloc<pthread_mutexattr_tVar>()
26+
private val mutex = arena.alloc<pthread_mutex_tVar>()
27+
28+
init {
29+
pthread_mutexattr_init(attr.ptr)
30+
pthread_mutexattr_settype(attr.ptr, PTHREAD_MUTEX_RECURSIVE.toInt())
31+
pthread_mutex_init(mutex.ptr, attr.ptr)
32+
freeze()
33+
}
34+
35+
actual fun lock() {
36+
pthread_mutex_lock(mutex.ptr)
37+
}
38+
39+
actual fun unlock() {
40+
pthread_mutex_unlock(mutex.ptr)
41+
}
42+
43+
actual fun tryLock(): Boolean = pthread_mutex_trylock(mutex.ptr) == 0
44+
45+
fun internalClose() {
46+
pthread_mutex_destroy(mutex.ptr)
47+
pthread_mutexattr_destroy(attr.ptr)
48+
arena.clear()
49+
}
50+
}
51+
52+
actual inline fun Lock.close() {
53+
internalClose()
54+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package co.touchlab.sqliter.concurrency
2+
3+
import kotlinx.cinterop.Arena
4+
import kotlinx.cinterop.alloc
5+
import kotlinx.cinterop.ptr
6+
import platform.posix.PTHREAD_MUTEX_RECURSIVE
7+
import platform.posix.pthread_mutex_destroy
8+
import platform.posix.pthread_mutex_init
9+
import platform.posix.pthread_mutex_lock
10+
import platform.posix.pthread_mutex_tVar
11+
import platform.posix.pthread_mutex_trylock
12+
import platform.posix.pthread_mutex_unlock
13+
import platform.posix.pthread_mutexattr_destroy
14+
import platform.posix.pthread_mutexattr_init
15+
import platform.posix.pthread_mutexattr_settype
16+
import platform.posix.pthread_mutexattr_tVar
17+
import kotlin.native.concurrent.freeze
18+
19+
/**
20+
* A simple lock.
21+
* Implementations of this class should be re-entrant.
22+
*/
23+
actual class Lock actual constructor() {
24+
private val arena = Arena()
25+
private val attr = arena.alloc<pthread_mutexattr_tVar>()
26+
private val mutex = arena.alloc<pthread_mutex_tVar>()
27+
28+
init {
29+
pthread_mutexattr_init(attr.ptr)
30+
pthread_mutexattr_settype(attr.ptr, PTHREAD_MUTEX_RECURSIVE.toInt())
31+
pthread_mutex_init(mutex.ptr, attr.ptr)
32+
freeze()
33+
}
34+
35+
actual fun lock() {
36+
pthread_mutex_lock(mutex.ptr)
37+
}
38+
39+
actual fun unlock() {
40+
pthread_mutex_unlock(mutex.ptr)
41+
}
42+
43+
actual fun tryLock(): Boolean = pthread_mutex_trylock(mutex.ptr) == 0
44+
45+
fun internalClose() {
46+
pthread_mutex_destroy(mutex.ptr)
47+
pthread_mutexattr_destroy(attr.ptr)
48+
arena.clear()
49+
}
50+
}
51+
52+
actual inline fun Lock.close() {
53+
internalClose()
54+
}

0 commit comments

Comments
 (0)