diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-03-06 15:20:31 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-03-06 15:20:31 +0100 |
| commit | 9372b96e472f88634c065674785115c8c52d2f48 (patch) | |
| tree | 159cc4efe1cbca9de62f565bdd7245184ababde5 /src | |
| parent | 24e133e0067b19a6fedb4ff79178305295e3d37b (diff) | |
| download | box64-9372b96e472f88634c065674785115c8c52d2f48.tar.gz box64-9372b96e472f88634c065674785115c8c52d2f48.zip | |
Some more improvment to xcb wrapping
Diffstat (limited to 'src')
| -rw-r--r-- | src/libtools/myalign.c | 57 |
1 files changed, 45 insertions, 12 deletions
diff --git a/src/libtools/myalign.c b/src/libtools/myalign.c index ea652f94..fa5cbc88 100644 --- a/src/libtools/myalign.c +++ b/src/libtools/myalign.c @@ -1133,6 +1133,7 @@ void myStackAlignScanfWValist(x64emu_t* emu, const char* fmt, uint64_t* mystack, #endif +#define MUTEX_SIZE_X64 40 typedef struct my_xcb_ext_s { pthread_mutex_t lock; struct lazyreply *extensions; @@ -1140,7 +1141,7 @@ typedef struct my_xcb_ext_s { } my_xcb_ext_t; typedef struct x64_xcb_ext_s { - uint8_t lock[60]; + uint8_t lock[MUTEX_SIZE_X64]; struct lazyreply *extensions; int extensions_size; } x64_xcb_ext_t; @@ -1154,7 +1155,7 @@ typedef struct my_xcb_xid_s { } my_xcb_xid_t; typedef struct x64_xcb_xid_s { - uint8_t lock[60]; + uint8_t lock[MUTEX_SIZE_X64]; uint32_t last; uint32_t base; uint32_t max; @@ -1188,6 +1189,23 @@ typedef struct my_xcb_in_s { struct xcb_special_event *special_events; } my_xcb_in_t; +typedef struct x64_xcb_out_s { + pthread_cond_t cond; + int writing; + pthread_cond_t socket_cond; + void (*return_socket)(void *closure); + void *socket_closure; + int socket_moving; + char queue[16384]; + int queue_len; + uint64_t request; + uint64_t request_written; + uint8_t reqlenlock[40]; + int maximum_request_length_tag; + uint32_t maximum_request_length; + my_xcb_fd_t out_fd; +} x64_xcb_out_t; + typedef struct my_xcb_out_s { pthread_cond_t cond; int writing; @@ -1220,14 +1238,14 @@ typedef struct x64_xcb_connection_s { int has_error; void *setup; int fd; - uint8_t iolock[60]; + uint8_t iolock[MUTEX_SIZE_X64]; my_xcb_in_t in; - my_xcb_out_t out; + x64_xcb_out_t out; x64_xcb_ext_t ext; x64_xcb_xid_t xid; } x64_xcb_connection_t; -#define NXCB 8 +#define NXCB 2 my_xcb_connection_t* my_xcb_connects[NXCB] = {0}; x64_xcb_connection_t x64_xcb_connects[NXCB] = {0}; @@ -1249,22 +1267,24 @@ void* align_xcb_connection(void* src) abort(); } #endif + #if 1 // do not update most values x64_xcb_connection_t* source = src; dest->has_error = source->has_error; dest->setup = source->setup; dest->fd = source->fd; - //memcpy(&dest->iolock, source->iolock, 60); + //memcpy(&dest->iolock, source->iolock, MUTEX_SIZE_X64); //dest->in = source->in; //dest->out = source->out; - //memcpy(&dest->ext.lock, source->ext.lock, 60); + //memcpy(&dest->ext.lock, source->ext.lock, MUTEX_SIZE_X64); dest->ext.extensions = source->ext.extensions; dest->ext.extensions_size = source->ext.extensions_size; - //memcpy(&dest->xid.lock, source->xid.lock, 60); + //memcpy(&dest->xid.lock, source->xid.lock, MUTEX_SIZE_X64); dest->xid.base = source->xid.base; dest->xid.inc = source->xid.inc; dest->xid.last = source->xid.last; dest->xid.max = source->xid.last; + #endif return dest; } @@ -1278,13 +1298,26 @@ void unalign_xcb_connection(void* src, void* dst) dest->has_error = source->has_error; dest->setup = source->setup; dest->fd = source->fd; - memcpy(dest->iolock, &source->iolock, 60); + memcpy(dest->iolock, &source->iolock, MUTEX_SIZE_X64); dest->in = source->in; - dest->out = source->out; - memcpy(dest->ext.lock, &source->ext.lock, 60); + memcpy(dest->out.reqlenlock, &source->out.reqlenlock, MUTEX_SIZE_X64); + dest->out.cond = source->out.cond; + dest->out.maximum_request_length = source->out.maximum_request_length; + dest->out.maximum_request_length_tag = source->out.maximum_request_length_tag; + dest->out.out_fd = source->out.out_fd; + memcpy(dest->out.queue, source->out.queue, sizeof(dest->out.queue)); + dest->out.queue_len = source->out.queue_len; + dest->out.request = source->out.request; + dest->out.request_written = source->out.request_written; + dest->out.return_socket = source->out.return_socket; + dest->out.socket_closure = source->out.socket_closure; + dest->out.socket_cond = source->out.socket_cond; + dest->out.socket_moving = source->out.socket_moving; + dest->out.writing = source->out.writing; + memcpy(dest->ext.lock, &source->ext.lock, MUTEX_SIZE_X64); dest->ext.extensions = source->ext.extensions; dest->ext.extensions_size = source->ext.extensions_size; - memcpy(dest->xid.lock, &source->xid.lock, 60); + memcpy(dest->xid.lock, &source->xid.lock, MUTEX_SIZE_X64); dest->xid.base = source->xid.base; dest->xid.inc = source->xid.inc; dest->xid.last = source->xid.last; |