about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-01-15 17:11:28 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-01-15 17:11:28 +0100
commit613781e6c0eacd4184eb244830d519f72ec9df1c (patch)
treea398a10c623382298ed81efcf6e51d5c1e1e72f2 /src
parent92c3c1f829ca9af41ce3bbfbefc8c1229af818be (diff)
downloadbox64-613781e6c0eacd4184eb244830d519f72ec9df1c.tar.gz
box64-613781e6c0eacd4184eb244830d519f72ec9df1c.zip
Fixed xcb_connect wrapping
Diffstat (limited to 'src')
-rw-r--r--src/libtools/myalign.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/libtools/myalign.c b/src/libtools/myalign.c
index 01701346..ea652f94 100644
--- a/src/libtools/myalign.c
+++ b/src/libtools/myalign.c
@@ -1240,12 +1240,15 @@ void* align_xcb_connection(void* src)
     for(int i=0; i<NXCB && !dest; ++i)
         if(src==&x64_xcb_connects[i])
             dest = my_xcb_connects[i];
+    #if 1
     if(!dest)
         dest = add_xcb_connection(src);
+    #else
     if(!dest) {
         printf_log(LOG_NONE, "BOX64: Error, xcb_connect %p not found\n", src);
-        return src;
+        abort();
     }
+    #endif
     // do not update most values
     x64_xcb_connection_t* source = src;
     dest->has_error = source->has_error;
@@ -1292,6 +1295,12 @@ void* add_xcb_connection(void* src)
 {
     if(!src)
         return src;
+    // check if already exist
+    for(int i=0; i<NXCB; ++i)
+        if(my_xcb_connects[i] == src) {
+            unalign_xcb_connection(src, &x64_xcb_connects[i]);
+            return &x64_xcb_connects[i];
+        }
     // find a free slot
     for(int i=0; i<NXCB; ++i)
         if(!my_xcb_connects[i]) {
@@ -1309,8 +1318,8 @@ void del_xcb_connection(void* src)
         return;
     // find it
     for(int i=0; i<NXCB; ++i)
-        if(src==my_xcb_connects[i]) {
-            my_xcb_connects[i] = 0;
+        if(src==&x64_xcb_connects[i]) {
+            my_xcb_connects[i] = NULL;
             memset(&x64_xcb_connects[i], 0, sizeof(x64_xcb_connection_t));
             return;
         }