summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAviana Cruz2023-12-14 06:06:15 +0000
committerAviana Cruz2023-12-14 06:06:15 +0000
commit1fc1696ca744f1b0e6b2f71fe84a57de6e69370b (patch)
tree5f6444e975499dc3d12a082d52f98abf5c721a1b
parent8b018d33c4c3037cd6361df38677e140cb4d8c0c (diff)
downloadaur-1fc1696ca744f1b0e6b2f71fe84a57de6e69370b.tar.gz
workaround some crashes
-rw-r--r--.SRCINFO6
-rw-r--r--PKGBUILD8
-rwxr-xr-xwemeet.sh1
-rw-r--r--wrap.c75
4 files changed, 78 insertions, 12 deletions
diff --git a/.SRCINFO b/.SRCINFO
index da52a3312d4a..6e950c9a8b23 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -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
diff --git a/PKGBUILD b/PKGBUILD
index 0bcdaf66dc9f..6a4638da14cc 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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
diff --git a/wrap.c b/wrap.c
index ca868071e542..cd1a971006ec 100644
--- a/wrap.c
+++ b/wrap.c
@@ -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,