diff options
author | Aviana Cruz | 2023-12-14 06:06:15 +0000 |
---|---|---|
committer | Aviana Cruz | 2023-12-14 06:06:15 +0000 |
commit | 1fc1696ca744f1b0e6b2f71fe84a57de6e69370b (patch) | |
tree | 5f6444e975499dc3d12a082d52f98abf5c721a1b | |
parent | 8b018d33c4c3037cd6361df38677e140cb4d8c0c (diff) | |
download | aur-1fc1696ca744f1b0e6b2f71fe84a57de6e69370b.tar.gz |
workaround some crashes
-rw-r--r-- | .SRCINFO | 6 | ||||
-rw-r--r-- | PKGBUILD | 8 | ||||
-rwxr-xr-x | wemeet.sh | 1 | ||||
-rw-r--r-- | wrap.c | 75 |
4 files changed, 78 insertions, 12 deletions
@@ -1,7 +1,7 @@ pkgbase = wemeet-bin pkgdesc = Tencent Video Conferencing, tencent meeting 腾讯会议 pkgver = 3.19.0.401 - pkgrel = 1 + pkgrel = 2 url = https://source.meeting.qq.com/download-center.html arch = x86_64 arch = aarch64 @@ -35,8 +35,8 @@ pkgbase = wemeet-bin provides = tencent-meeting source = wemeet.sh source = wrap.c - sha512sums = 533f9dc9b2110f689ed04551c703ffeddb2c2143e059f5468ba6b34fcfa865b8a22371eb3ee52c9c257323937f8365af931029c82224cfecbf09dac00d086a9a - sha512sums = e766239691d77029345f4c2c0a0936c9271c7bedcf8727e3cd9a97777a399ab097425ab6e8f3626a6e98e3f56fc46d1247e8e5c91d6af82b1807cca04985a149 + sha512sums = 86fad230304c9d12fc3c34635e4afb4eed5419298f1e357192ebd36953c273aae78f1c89587200e6ebeb374fec23f0486222a2ea86a73f9b72cf06d4628b587f + sha512sums = f98e9ae5842c05a19ad4f883c8f9d88ef3b64e04b034e7fd8b23ddca81510f0bd38688ad7c63ddf8badaa727a7b599ceede87419e9694c06d7a4b06138b94c15 source_x86_64 = wemeet-3.19.0.401-x86_64.deb::https://updatecdn.meeting.qq.com/cos/bb4001c715553579a8b3e496233331d4/TencentMeeting_0300000000_3.19.0.401_x86_64_default.publish.deb sha512sums_x86_64 = 2814febb1596cb8e6db75a7d71915771a9d6750cf162c3cb9b70379130da41d7fca7b3df1567a8de1d2967d97add4d2fc08764fbf4155a79852c75ea8fed754b source_aarch64 = wemeet-3.19.0.401-aarch64.deb::https://updatecdn.meeting.qq.com/cos/0f96a97b0aaea9b9d5d2c2b912ede656/TencentMeeting_0300000000_3.19.0.401_arm64_default.publish.deb @@ -8,7 +8,7 @@ pkgver=3.19.0.401 _pkgver_arm=${pkgver} # 两个版本有时候不一样 _x86_md5=bb4001c715553579a8b3e496233331d4 _arm_md5=0f96a97b0aaea9b9d5d2c2b912ede656 -pkgrel=1 +pkgrel=2 pkgdesc="Tencent Video Conferencing, tencent meeting 腾讯会议" arch=('x86_64' 'aarch64') license=('unknown') @@ -31,8 +31,8 @@ optdepends=( 'bubblewrap: Fix abnormal text color in dark mode and prevent messing files.' ) makedepends=('patchelf') -sha512sums=('533f9dc9b2110f689ed04551c703ffeddb2c2143e059f5468ba6b34fcfa865b8a22371eb3ee52c9c257323937f8365af931029c82224cfecbf09dac00d086a9a' - 'e766239691d77029345f4c2c0a0936c9271c7bedcf8727e3cd9a97777a399ab097425ab6e8f3626a6e98e3f56fc46d1247e8e5c91d6af82b1807cca04985a149') +sha512sums=('86fad230304c9d12fc3c34635e4afb4eed5419298f1e357192ebd36953c273aae78f1c89587200e6ebeb374fec23f0486222a2ea86a73f9b72cf06d4628b587f' + 'f98e9ae5842c05a19ad4f883c8f9d88ef3b64e04b034e7fd8b23ddca81510f0bd38688ad7c63ddf8badaa727a7b599ceede87419e9694c06d7a4b06138b94c15') sha512sums_x86_64=('2814febb1596cb8e6db75a7d71915771a9d6750cf162c3cb9b70379130da41d7fca7b3df1567a8de1d2967d97add4d2fc08764fbf4155a79852c75ea8fed754b') sha512sums_aarch64=('6099ec383e74dc776a9864743c9a2c624a5bea34e2ffb32b3fb57b66016a60dc1356ad3b58c6142ed2f3d9db83fc38ffd9c9661b282bf895e20d837277a07c76') @@ -73,7 +73,7 @@ build() { read -ra openssl_args < <(pkgconf --libs openssl) read -ra libpulse_args < <(pkgconf --cflags --libs libpulse) # Comment out `-D WRAP_FORCE_SINK_HARDWARE` to disable the patch that forces wemeet detects sink as hardware sink - "${CC:-cc}" $CFLAGS -fPIC -shared "${openssl_args[@]}" "${libpulse_args[@]}" -o libwemeetwrap.so wrap.c -D WRAP_FORCE_SINK_HARDWARE + "${CC:-cc}" $CFLAGS -Wall -Wextra -fPIC -shared "${openssl_args[@]}" "${libpulse_args[@]}" -o libwemeetwrap.so wrap.c -D WRAP_FORCE_SINK_HARDWARE } package() { diff --git a/wemeet.sh b/wemeet.sh index 1ea38cac3b80..62b2ecae70ec 100755 --- a/wemeet.sh +++ b/wemeet.sh @@ -14,6 +14,7 @@ LD_PRELOAD_WRAP="${LD_PRELOAD:-}:/usr/lib/wemeet/libwemeetwrap.so" # 用于缓 if [ "$(basename "$0")" = 'wemeet-x11' ]; then # force x11 export XDG_SESSION_TYPE=x11 + export EGL_PLATFORM=x11 export QT_QPA_PLATFORM=xcb unset WAYLAND_DISPLAY fi @@ -6,6 +6,7 @@ #include <X11/Xlibint.h> #include <dlfcn.h> #include <openssl/ssl.h> +#include <stdbool.h> #include <stdlib.h> #ifdef WRAP_FORCE_SINK_HARDWARE @@ -22,13 +23,17 @@ X509 *SSL_get_peer_certificate(const SSL *s) { return SSL_get1_peer_certificate(s); } -// temporary hack for Wayland screen sharing crash -typedef int (*wrap_XMapWindow_t)(register Display *dpy, Window w); +// temporary hack for Wayland crashes +static bool warp_is_wayland() { + const char *env = getenv("XDG_SESSION_TYPE"); + return env != NULL && strcmp(env, "wayland") == 0; +} + +typedef int (*wrap_XMapWindow_t)(Display *dpy, Window w); static wrap_XMapWindow_t wrap_orig_XMapWindow; -int XMapWindow(register Display *dpy, Window w) { - const char *env = getenv("XDG_SESSION_TYPE"); - if (env == NULL || strcmp(env, "wayland") != 0) { +int XMapWindow(Display *dpy, Window w) { + if (!warp_is_wayland()) { if (!wrap_orig_XMapWindow) { wrap_orig_XMapWindow = dlsym(RTLD_NEXT, "XMapWindow"); } @@ -39,6 +44,66 @@ int XMapWindow(register Display *dpy, Window w) { return 1; } +typedef Atom (*wrap_XInternAtom_t)(Display *dpy, const char *name, + Bool onlyIfExists); +static wrap_XInternAtom_t wrap_orig_XInternAtom; + +Atom XInternAtom(Display *dpy, const char *name, Bool onlyIfExists) { + if (!warp_is_wayland()) { + if (!wrap_orig_XInternAtom) { + wrap_orig_XInternAtom = dlsym(RTLD_NEXT, "XInternAtom"); + } + + return wrap_orig_XInternAtom(dpy, name, onlyIfExists); + } else { + dpy->lock_fns = NULL; + } + + return None; +} + +typedef Status (*wrap_XSendEvent_t)(Display *dpy, Window w, Bool propagate, + long event_mask, XEvent *event); +static wrap_XSendEvent_t wrap_orig_XSendEvent; + +Status XSendEvent(Display *dpy, Window w, Bool propagate, long event_mask, + XEvent *event) { + if (!warp_is_wayland()) { + if (!wrap_orig_XSendEvent) { + wrap_orig_XSendEvent = dlsym(RTLD_NEXT, "XSendEvent"); + } + + return wrap_orig_XSendEvent(dpy, w, propagate, event_mask, event); + } else { + dpy->lock_fns = NULL; + } + + return 0; +} + +typedef Status (*wrap_XFlush_t)(Display *dpy); +static wrap_XFlush_t wrap_orig_XFlush; + +Status XFlush(Display *dpy) { + if (!warp_is_wayland()) { + if (!wrap_orig_XFlush) { + wrap_orig_XFlush = dlsym(RTLD_NEXT, "XFlush"); + } + + return wrap_orig_XFlush(dpy); + } else { + dpy->lock_fns = NULL; + } + + return 0; +} + +/* workaround crash on Account and security page +/opt/wemeet/bin/wemeetapp: symbol lookup error: +/usr/lib/wemeet/libwemeet_framework.so: undefinedsymbol: +_ZN7QWidget16setPaintsEnabledEb, version Qt_5 */ +void _ZN7QWidget16setPaintsEnabledEb() { return; } + #ifdef WRAP_FORCE_SINK_HARDWARE typedef pa_operation *(*wrap_pa_get_sink_by_name_t)(pa_context *c, const char *name, |