On Sat, Nov 23, 2019 at 09:34:15PM -0800, Nam Nguyen wrote: > Pascal Stumpf writes: > > > On Fri, 22 Nov 2019 09:14:05 +0100, Solene Rapenne wrote: > >> Hi, > >> > >> I updated openmw like I did last time, but when I start the game I don't > >> get any X window displayed, but I see an openmw process using 100% cpu. > >> Any idea? > >> > >> openmw-launcher and openmw-wizard works. > > > > I know. I haven't found out why yet. > > I was able to reproduce Solene's reported issue. Here is a diff based on > Solene's diff that: > - Backports an upstream fix for this issue: > https://github.com/OpenMW/openmw/commit/fe69e5507df97d84d3cb29d760da78f64e41cc07 > - Removes REVISION > > It seems that the "crash handler" was preventing startup. If you do not > want to carry this patch it should be fixed by 0.46.0. > > I tested on amd64, and it now starts normally. > > $ openmw > Crash handler installed > Loading config file: /home/namtsui/.config/openmw/openmw.cfg > Loading config file: /etc/openmw/openmw.cfg > OpenMW version 0.45.0 > > Feedback and tests are welcome. > > Index: Makefile > =================================================================== > RCS file: /cvs/ports/games/openmw/Makefile,v > retrieving revision 1.20 > diff -u -p -u -r1.20 Makefile > --- Makefile 12 Jul 2019 20:46:22 -0000 1.20 > +++ Makefile 24 Nov 2019 05:09:04 -0000 > @@ -4,9 +4,8 @@ ONLY_FOR_ARCHS = amd64 i386 > > COMMENT = open source implementation of TES III: Morrowind > > -V = 0.44.0 > +V = 0.45.0 > DISTNAME = openmw-$V > -REVISION = 1 > > CATEGORIES = games > > Index: distinfo > =================================================================== > RCS file: /cvs/ports/games/openmw/distinfo,v > retrieving revision 1.8 > diff -u -p -u -r1.8 distinfo > --- distinfo 30 Jul 2018 18:51:40 -0000 1.8 > +++ distinfo 24 Nov 2019 05:09:04 -0000 > @@ -1,2 +1,2 @@ > -SHA256 (openmw-0.44.0.tar.gz) = nn25ndPhQ0suMunmGuWo+1FqabtogPsoVsCfLJyozw0= > -SIZE (openmw-0.44.0.tar.gz) = 4976422 > +SHA256 (openmw-0.45.0.tar.gz) = tjz5cfQG718oAZ9l6eK9lkGiJ0We3kXRR1YpF/Z+HGQ= > +SIZE (openmw-0.45.0.tar.gz) = 4711103 > Index: patches/patch-components_crashcatcher_crashcatcher_cpp > =================================================================== > RCS file: patches/patch-components_crashcatcher_crashcatcher_cpp > diff -N patches/patch-components_crashcatcher_crashcatcher_cpp > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-components_crashcatcher_crashcatcher_cpp 24 Nov 2019 > 05:09:04 -0000 > @@ -0,0 +1,152 @@ > +$OpenBSD$ > + > +Fixes game failing to start. > +Upstream commit fe69e5507df97d84d3cb29d760da78f64e41cc07 > + > +Index: components/crashcatcher/crashcatcher.cpp > +--- components/crashcatcher/crashcatcher.cpp.orig > ++++ components/crashcatcher/crashcatcher.cpp > +@@ -17,6 +17,7 @@ > + #include <components/debug/debuglog.hpp> > + > + #include <boost/filesystem/fstream.hpp> > ++#include <boost/filesystem/operations.hpp> > + > + namespace bfs = boost::filesystem; > + > +@@ -34,9 +35,13 @@ namespace bfs = boost::filesystem; > + > + #if defined(__APPLE__) > + #include <sys/sysctl.h> > ++#include <libproc.h> > + #endif > + > +-#define UNUSED(x) (void)(x) > ++#if defined(__FreeBSD__) > ++#include <sys/sysctl.h> > ++#include <sys/user.h> > ++#endif > + > + static const char crash_switch[] = "--cc-handle-crash"; > + > +@@ -413,6 +418,39 @@ static void crash_handler(const char *logfile) > + exit(0); > + } > + > ++static void getExecPath(char **argv) > ++{ > ++#if defined (__FreeBSD__) > ++ int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 }; > ++ size_t size = sizeof(argv0); > ++ > ++ if (sysctl(mib, 4, argv0, &size, nullptr, 0) == 0) > ++ return; > ++#endif > ++ > ++#if defined (__APPLE__) > ++ if(proc_pidpath(getpid(), argv0, sizeof(argv0)) > 0) > ++ return; > ++#endif > ++ int cwdlen; > ++ const char *statusPaths[] = {"/proc/self/exe", "/proc/self/file", > "/proc/curproc/exe", "/proc/curproc/file"}; > ++ memset(argv0, 0, sizeof(argv0)); > ++ > ++ for(const char *path : statusPaths) > ++ { > ++ if (readlink(path, argv0, sizeof(argv0)) != -1) > ++ return; > ++ } > ++ > ++ if(argv[0][0] == '/') > ++ snprintf(argv0, sizeof(argv0), "%s", argv[0]); > ++ else if (getcwd(argv0, sizeof(argv0)) != NULL) > ++ { > ++ cwdlen = strlen(argv0); > ++ snprintf(argv0+cwdlen, sizeof(argv0)-cwdlen, "/%s", argv[0]); > ++ } > ++} > ++ > + int crashCatcherInstallHandlers(int argc, char **argv, int num_signals, int > *signals, const char *logfile, int (*user_info)(char*, char*)) > + { > + struct sigaction sa; > +@@ -424,20 +462,7 @@ int crashCatcherInstallHandlers(int argc, char **argv, > + > + cc_user_info = user_info; > + > +- if(argv[0][0] == '/') > +- snprintf(argv0, sizeof(argv0), "%s", argv[0]); > +- else > +- { > +- { > +- /* we don't want to disable "ignoring return value" warnings, > so we make > +- * a special exception here. */ > +- char * unused; > +- unused = getcwd(argv0, sizeof(argv0)); > +- UNUSED(unused); > +- } > +- retval = strlen(argv0); > +- snprintf(argv0+retval, sizeof(argv0)-retval, "/%s", argv[0]); > +- } > ++ getExecPath(argv); > + > + /* Set an alternate signal stack so SIGSEGVs caused by stack overflows > + * still run */ > +@@ -467,20 +492,24 @@ int crashCatcherInstallHandlers(int argc, char **argv, > + > + static bool is_debugger_present() > + { > +-#if !defined (__APPLE__) > +- bfs::ifstream file((bfs::path("/proc/self/status"))); > +- while (!file.eof()) > ++#if defined (__linux__) > ++ bfs::path procstatus = bfs::path("/proc/self/status"); > ++ if (bfs::exists(procstatus)) > + { > +- std::string word; > +- file >> word; > +- if (word == "TracerPid:") > ++ bfs::ifstream file((procstatus)); > ++ while (!file.eof()) > + { > ++ std::string word; > + file >> word; > +- return word != "0"; > ++ if (word == "TracerPid:") > ++ { > ++ file >> word; > ++ return word != "0"; > ++ } > + } > + } > + return false; > +-#else > ++#elif defined(__APPLE__) > + int junk; > + int mib[4]; > + struct kinfo_proc info; > +@@ -508,12 +537,24 @@ static bool is_debugger_present() > + // We're being debugged if the P_TRACED flag is set. > + > + return (info.kp_proc.p_flag & P_TRACED) != 0; > ++#elif defined(__FreeBSD__) > ++ struct kinfo_proc info; > ++ size_t size = sizeof(info); > ++ int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid() }; > ++ > ++ if (sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, nullptr, 0) > == 0) > ++ return (info.ki_flag & P_TRACED) != 0; > ++ else > ++ perror("Failed to retrieve process info"); > ++ return false; > ++#else > ++ return false; > + #endif > + } > + > + void crashCatcherInstall(int argc, char **argv, const std::string > &crashLogPath) > + { > +- if ((argc == 2 && strcmp(argv[1], "--cc-handle-crash") == 0) || > !is_debugger_present()) > ++ if ((argc == 2 && strcmp(argv[1], crash_switch) == 0) || > !is_debugger_present()) > + { > + int s[5] = { SIGSEGV, SIGILL, SIGFPE, SIGBUS, SIGABRT }; > + if (crashCatcherInstallHandlers(argc, argv, 5, s, > crashLogPath.c_str(), nullptr) == -1) > Index: pkg/PLIST > =================================================================== > RCS file: /cvs/ports/games/openmw/pkg/PLIST,v > retrieving revision 1.8 > diff -u -p -u -r1.8 PLIST > --- pkg/PLIST 4 Sep 2018 12:46:13 -0000 1.8 > +++ pkg/PLIST 24 Nov 2019 05:09:04 -0000 > @@ -127,6 +127,8 @@ share/openmw/resources/shaders/lighting. > share/openmw/resources/shaders/objects_fragment.glsl > share/openmw/resources/shaders/objects_vertex.glsl > share/openmw/resources/shaders/parallax.glsl > +share/openmw/resources/shaders/s360_fragment.glsl > +share/openmw/resources/shaders/s360_vertex.glsl > share/openmw/resources/shaders/terrain_fragment.glsl > share/openmw/resources/shaders/terrain_vertex.glsl > share/openmw/resources/shaders/water_fragment.glsl
works here too with the imported patch