Skip to content

Instantly share code, notes, and snippets.

@mgood7123
Created November 17, 2022 13:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mgood7123/1724b72bb689dc790467e7c7331ae7b9 to your computer and use it in GitHub Desktop.
Save mgood7123/1724b72bb689dc790467e7c7331ae7b9 to your computer and use it in GitHub Desktop.
11-17 23:50:41.507 I/SHARED_MEMORY(14761): [create]
11-17 23:50:41.507 I/SHARED_MEMORY(14761): ashmem_create_region
11-17 23:50:41.507 I/SHARED_MEMORY(14761): __memfd_mem_open
11-17 23:50:41.507 I/SHARED_MEMORY(14761): sys_memfd_create
11-17 23:50:41.507 I/SHARED_MEMORY(14761): using memfd
11-17 23:50:41.507 I/SHARED_MEMORY(14761): ashmem_set_prot_region
11-17 23:50:41.507 I/SHARED_MEMORY(14761): __ashmem_is_memfd
11-17 23:50:41.507 I/SHARED_MEMORY(14761): memfd_set_prot_region
11-17 23:50:41.507 I/SHARED_MEMORY(14761): [size]
11-17 23:50:41.507 I/SHARED_MEMORY(14761): ashmem_valid
11-17 23:50:41.507 I/SHARED_MEMORY(14761): __ashmem_is_memfd
11-17 23:50:41.507 I/SHARED_MEMORY(14761): ashmem_get_size_region
11-17 23:50:41.507 I/SHARED_MEMORY(14761): __ashmem_is_memfd
11-17 23:50:41.507 I/SHARED_MEMORY(14761): [map]
11-17 23:50:41.507 I/SHARED_MEMORY(14761): [map] pointer: 0x73668ca000
11-17 23:50:41.507 I/trace (14761): android_daw/sdk/ipc/SocketClient.hx:97: created shared_memory fd: 27, size: 1
11-17 23:50:41.507 I/trace (14761): android_daw/sdk/ipc/SocketClient.hx:106: fd_socket fd: 28
11-17 23:50:41.507 I/trace (14761): android_daw/sdk/ipc/SocketClient.hx:107: connecting to fd_socket HELLO : 0
11-17 23:50:41.507 I/Unix Domain Socket(14761): connecting to \0HELLO
11-17 23:50:41.507 I/trace (14761): android_daw/sdk/ipc/SocketClient.hx:111: writing fd...
11-17 23:50:41.507 I/Unix Domain Socket(14761): sent fd: 27, from socket fd 28
11-17 23:50:41.507 I/trace (14761): android_daw/sdk/ipc/SocketClient.hx:113: wrote fd
11-17 23:50:41.507 I/trace (14761): android_daw/sdk/ipc/SocketClient.hx:115: FD_SOCKET CLOSED
11-17 23:50:41.512 I/trace (14761): src/Main.hx:23: connected to server
11-17 23:50:41.516 I/Unix Domain Socket(14691): status = 0
11-17 23:50:41.516 I/Unix Domain Socket(14691): received fd: 77, from socket fd 71
11-17 23:50:41.516 I/SHARED_MEMORY(14691): [size]
11-17 23:50:41.516 I/SHARED_MEMORY(14691): ashmem_valid
11-17 23:50:41.516 I/SHARED_MEMORY(14691): __ashmem_is_memfd
11-17 23:50:41.516 I/SHARED_MEMORY(14691): ashmem_get_size_region
11-17 23:50:41.516 I/SHARED_MEMORY(14691): __ashmem_is_memfd
11-17 23:50:41.516 I/SHARED_MEMORY(14691): [map]
11-17 23:50:41.516 E/SHARED_MEMORY(14691): mmap failed for SHARED_MEMORY__map(IPC_77): Invalid argument
class SharedMemory
{
@:native("SHARED_MEMORY__create")
extern static function Ccreate(name: ConstCharStar, size: Int):Int;
@:native("SHARED_MEMORY__size")
extern static function Csize(name: ConstCharStar, fd: Int):Int;
@:native("SHARED_MEMORY__map")
extern static function Cmap(name: ConstCharStar, fd: Int, size: Int):Star<Char>;
@:native("SHARED_MEMORY__read_byte")
extern static function CreadByte(pointer: Star<Char>, pos: Int): Int;
@:native("SHARED_MEMORY__write_byte")
extern static function CwriteByte(pointer: Star<Char>, pos: Int, byte: Int);
@:native("SHARED_MEMORY__munmap")
extern static function Cmunmap(name: ConstCharStar, pointer: Star<Char>, size: Int): Int;
@:native("SHARED_MEMORY__close")
extern static function Cclose(name: ConstCharStar, fd: Int):Int;
var name: String;
var handle: Int;
var size: Int;
var pointer: Star<Char>;
public function new(name: String, size: Int, ?fd: Int = null)
{
this.name = name;
handle = fd == null ? Ccreate(name, size) : fd;
if (handle > 0) {
this.size = Csize(name, handle);
if (this.size > 0) {
pointer = Cmap(name, handle, size);
} else {
handle = 0;
size = 0;
}
} else {
size = 0;
}
}
int SHARED_MEMORY__create(const char * name, int size) {
LOG_INFO(\"[create]\");
if (size <= 0) {
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, \"cannot create shared mem (with name: %s) with a size of zero\", name);
return 0;
}
int handle = ASharedMemory_create(name, size);
if (handle > 0) {
if (ASharedMemory_setProt(
#ifdef NEED_ASHMEM_IMPL
name,
#endif
handle, PROT_READ | PROT_WRITE) == 0) {
return handle;
}
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, \"failed to set shared mem (with name: %s) protection, errno: %d\", name, errno);
// failed to prot fd, close it
if (close(handle) < 0) {
LOG_ERROR(\"close failed for SHARED_MEMORY__create(%s): %s\", name, strerror(errno));
}
} else {
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, \"failed to create shared mem (with name: %s) errno: %d\", name, errno);
}
return 0;
}
int SHARED_MEMORY__size(const char * name, int fd) {
LOG_INFO(\"[size]\");
int s = ASharedMemory_getSize(
#ifdef NEED_ASHMEM_IMPL
name,
#endif
fd);
if (s <= 0) {
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, \"failed to get size, shared mem (with name: %s) does not have a valid file descriptor: %d\", name, fd);
}
return s;
}
char* SHARED_MEMORY__map(const char * name, int fd, int size) {
LOG_INFO(\"[map]\");
char * buffer = (char * ) mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (buffer == MAP_FAILED) {
LOG_ERROR(\"mmap failed for SHARED_MEMORY__map(%s): %s\", name, strerror(errno));
return NULL;
}
LOG_INFO(\"[map] pointer: %p\", buffer);
if (buffer == NULL) {
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, \"failed to map buffer for shared mem (with name: %s), errno: %d\", name, errno);
}
return buffer;
}
int SHARED_MEMORY__read_byte(char* pointer, int pos) {
LOG_INFO(\"[read]\");
LOG_INFO(\"[read] pointer: %p\", pointer);
return pointer[pos];
}
void SHARED_MEMORY__write_byte(char* pointer, int pos, int byte) {
LOG_INFO(\"[write]\");
LOG_INFO(\"[write] pointer: %p\", pointer);
pointer[pos] = byte;
}
int SHARED_MEMORY__munmap(const char * name, char * pointer, int size) {
LOG_INFO(\"[munmap]\");
LOG_INFO(\"[munmap] pointer: %p\", pointer);
int s = munmap(pointer, size);
if (s < 0) {
LOG_ERROR(\"munmap failed for SHARED_MEMORY__munmap(%s): %s\", name, strerror(errno));
return s;
}
return s;
}
int SHARED_MEMORY__close(const char * name, int fd) {
LOG_INFO(\"[close]\");
int s = close(fd);
if (s == -1) {
__android_log_print(ANDROID_LOG_VERBOSE, APPNAME, \"failed to close shared mem (with name: %s), errno: %d\", name, errno);
}
return s;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment