Convert munmap operation to JNI
This commit is contained in:
1 parent
f5bd097584
commit
6efe8922b3
2 files changed
+12
-9
No files matched your search
@@ -23,10 +23,3 @@ Java_com_hippo_Native_getFd(JNIEnv *env, jclass clazz, jobject fileDescriptor) {
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_hippo_Native_unmapDirectByteBuffer(JNIEnv *env, jclass clazz, jobject buffer) {
|
||||
void *addr = (*env)->GetDirectBufferAddress(env, buffer);
|
||||
size_t size = (*env)->GetDirectBufferCapacity(env, buffer);
|
||||
if (munmap(addr, size)) LOGE("munmap addr:%p, size%zu failed!", addr, size);
|
||||
}
|
||||
@@ -15,13 +15,23 @@ import platform.posix.PROT_READ
|
||||
import platform.posix.PROT_WRITE
|
||||
import platform.posix.errno
|
||||
import platform.posix.mmap
|
||||
import platform.posix.strerror
|
||||
import platform.posix.munmap
|
||||
|
||||
@OptIn(UnsafeNumber::class)
|
||||
@Suppress("UNUSED_PARAMETER")
|
||||
@CName("Java_com_hippo_Native_mapFd")
|
||||
fun mapFd(env: CPointer<JNIEnvVar>, clazz: jclass, fd: jint, capability: jlong): jobject {
|
||||
val result = mmap(null, capability.tosize_t(), PROT_READ or PROT_WRITE, MAP_PRIVATE, fd, 0)
|
||||
result ?: Warn("mmap call with fd:${fd} capability:${capability} failed!, error:${strerror(errno)}")
|
||||
result ?: Warn("mmap call with fd:${fd} capability:${capability} failed!, errno:${errno}")
|
||||
return result?.let { env.newDirectByteBuffer(result, capability) } ?: interpretCPointer(nativeNullPtr)!!
|
||||
}
|
||||
|
||||
@Suppress("UNUSED_PARAMETER")
|
||||
@OptIn(UnsafeNumber::class)
|
||||
@CName("Java_com_hippo_Native_unmapDirectByteBuffer")
|
||||
fun unmapFd(env: CPointer<JNIEnvVar>, clazz: jclass, buffer: jobject) {
|
||||
val addr = env.getDirectBufferAddress(buffer)
|
||||
val size = env.getDirectBufferCapacity(buffer)
|
||||
val result = munmap(addr, size.tosize_t())
|
||||
if (result != 0) Warn("mmap call with addr:${addr} size:${size} failed!, errno:${errno}")
|
||||
}
|
||||
Reference in new issue
Block a user