Errors compiling 0.4 on OpenBSD
-
- Posts: 8
- Joined: Thu Dec 23, 2010 5:45 pm
Re: Errors compiling 0.4 on OpenBSD
I also observed a bug like this lately (crashes instantly), but for me it was fixed with the latest bzr revision from launchpad. Perhaps it works for you as well?
-
- Posts: 8
- Joined: Thu Dec 23, 2010 5:45 pm
Re: Errors compiling 0.4 on OpenBSD
I just took a quick look at this, can you test if the following patch fixes the issue?
I think this worked on linux because `pthread_mutexattr_t` is not dynamically allocated on linux, but it is on OpenBSD. Also, you'll only hit this bug if you compile with a headers-only boost library, because otherwise you'll use boost's thread implementation and not this stub.
Code: Select all
=== modified file 'src/tools/tMutex.cpp'
--- src/tools/tMutex.cpp 2011-08-24 21:13:01 +0000
+++ src/tools/tMutex.cpp 2016-06-03 15:38:35 +0000
@@ -73,8 +73,10 @@
// TODO: error checking
pthread_mutexattr_t mta;
+ pthread_mutexattr_init(&mta);
pthread_mutexattr_settype(&mta, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&mutex_, &mta);
+ pthread_mutexattr_destroy(&mta);
#endif
}
}
Re: Errors compiling 0.4 on OpenBSD
That looks like it was written by someone who reads documentation. I integrated it already, even if it does not fix this particular issue, it's clearly more correct.
Following tradition: How do you want to be credited in AUTHORS?
Following tradition: How do you want to be credited in AUTHORS?
-
- Posts: 8
- Joined: Thu Dec 23, 2010 5:45 pm
Re: Errors compiling 0.4 on OpenBSD
You can use my alias <|tux for that.Z-Man wrote:Following tradition: How do you want to be credited in AUTHORS?
Re: Errors compiling 0.4 on OpenBSD
It works. It actually works. Ok, deep breaths. I must calm down. Nope, can't calm down
Thankyou very, very much!
I don't suppose there's a similar fix for when it crashes when I attempt to view the master server browser using the game client? That would really, really be awesome...
Thankyou very, very much!
I don't suppose there's a similar fix for when it crashes when I attempt to view the master server browser using the game client? That would really, really be awesome...
Playing since December 2006
-
- Posts: 8
- Joined: Thu Dec 23, 2010 5:45 pm
Re: Errors compiling 0.4 on OpenBSD
If you have a stacktrace from a crash, I could take a look.
Re: Errors compiling 0.4 on OpenBSD
Code: Select all
(gdb) run
Starting program: /usr/local/bin/armagetronad
Program received signal SIGABRT, Aborted.
[Switching to thread 1031966]
0x00001147e175594a in thrkill () at <stdin>:2
2 <stdin>: No such file or directory.
in <stdin>
Current language: auto; currently asm
(gdb) bt
#0 0x00001147e175594a in thrkill () at <stdin>:2
#1 0x00001147e17034d9 in *_libc_abort () at /usr/src/lib/libc/stdlib/abort.c:52
#2 0x0000114830adb675 in *_libpthread_pthread_mutex_unlock (mutexp=Variable "mutexp" is not available.
) at /usr/src/lib/librthread/rthread_sync.c:223
#3 0x00001145c89518f3 in tBackgroundSync::~tBackgroundSync () from /usr/local/bin/armagetronad
#4 0x00001145c88de9b5 in boost::thread::run<tMemberFunctionRunnerTemplate<nDNSResolver> > () from /usr/local/bin/armagetronad
#5 0x0000114830adfeee in _rthread_start (v=Variable "v" is not available.
) at /usr/src/lib/librthread/rthread.c:115
#6 0x00001147e1764ebb in __tfork_thread () at /usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:75
#7 0x0000000000000000 in ?? ()
(gdb)
Playing since December 2006
- Lucifer
- Project Developer
- Posts: 8640
- Joined: Sun Aug 15, 2004 3:32 pm
- Location: Republic of Texas
- Contact:
Re: Errors compiling 0.4 on OpenBSD
It's still a threading issue. Isn't there an option to build without multi-threading? I know it was there at some time, but it may have been removed (I also remember that the threading library we used stopped being maintained, and there were changes because of that).
Re: Errors compiling 0.4 on OpenBSD
I've looked through the configure script's options and the only one that mentions threads is:
Also, correct me if I'm wrong but doesn't boost provide some multithreading capabilities? If so, I could try compiling without boost although I'm guessing boost is used for more than just multithreading?
Code: Select all
--enable-binreloc-threads Compile binary relocation with threads support (default=yes)
Playing since December 2006
Re: Errors compiling 0.4 on OpenBSD
You won't be able to compile arma completely without boost, some of its libraries are required (shared_ptr and any are the ones I remember). boost-threads is opional; the code tux fixed was in the fallback part that is only active if you don't have boost-threads installed.
So: Uninstalling boost entirely: bad idea.
But installing boost-threads in a development version (then running arma's configure script again): That may fix your problems. It won't fix our apparently still broken fallback code, but that's our problem.
So: Uninstalling boost entirely: bad idea.
But installing boost-threads in a development version (then running arma's configure script again): That may fix your problems. It won't fix our apparently still broken fallback code, but that's our problem.
Re: Errors compiling 0.4 on OpenBSD
I've just tried to compile the latest 0.4 (bzr revno 1603) on OpenBSD and it fails. Details of the error(s):
A fix would be appreciated
Code: Select all
g++ -DHAVE_CONFIG_H -I. -I.. -I/usr/local/include/libxml2 -I/usr/local/include -I/usr/local/include -I/usr/local/include/SDL2 -I/usr/X11R6/include -D_REENTRANT -I/usr/X11R6/include -I/usr/local/include/libpng16 -I/usr/local/include -I/usr/local/include/FTGL -I/usr/X11R6/include/freetype2 -I/usr/X11R6/include/freetype2 -I./tools -I./resource -I./thirdparty/mathexpr -I./thirdparty/utf8 -I./protobuf -Iprotobuf -I./network -O2 -I/usr/X11R6/include -MT network/libnetwork_a-nAuthentication.o -MD -MP -MF network/.deps/libnetwork_a-nAuthentication.Tpo -c -o network/libnetwork_a-nAuthentication.o `test -f 'network/nAuthentication.cpp' || echo './'`network/nAuthentication.cpp
In file included from network/nAuthentication.cpp:35:
network/nNetwork.h:833: error: expected constructor, destructor, or type conversion before '<' token
In file included from network/nAuthentication.cpp:38:
network/nServerInfo.h:104: error: ISO C++ forbids declaration of 'unique_ptr' with no type
network/nServerInfo.h:104: error: invalid use of '::'
network/nServerInfo.h:104: error: expected ';' before '<' token
gmake[3]: *** [Makefile:2188: network/libnetwork_a-nAuthentication.o] Error 1
gmake[3]: Leaving directory '/root/archive/armagetronad/0.4/src'
gmake[2]: *** [Makefile:4145: all-recursive] Error 1
gmake[2]: Leaving directory '/root/archive/armagetronad/0.4/src'
gmake[1]: *** [Makefile:768: all-recursive] Error 1
gmake[1]: Leaving directory '/root/archive/armagetronad/0.4'
gmake: *** [Makefile:560: all] Error 2
Playing since December 2006
Re: Errors compiling 0.4 on OpenBSD
Maybe the compiler doesn't eat the "std::unique_ptr< type > variable" declaration with the spaces there; could be confusing it with the < and > operators. Before the last code change it used std::auto_ptr there which doesn't seem to have </> operators at all.
Re: Errors compiling 0.4 on OpenBSD
No, whitespace can't be the issue. It's unique_ptr is new in the C++11 standard, and gcc assumes we're using an earlier one. Odd. There should be a -std=c++11 command line switch indicating our preference there, configure is supposed to add it. And configure is supposed to automatially get rerun if it changes...
Can you manually rerun configure and see if that fixes things? If not, please post configure.log.
Background: auto_ptr had really unintuitive semantics; it's copy operator had a non-const-reference source argument and invalidated the source. Therefore was deprecated in C++11 now that move semantics are awailable. GCC 6 now uses C++11 as default standard, that's what raised the issue in the form of a torrent of warnings. Plus, C++11 is an awesome step forward and should be supported everywhere by now.
By the way, code::blocks compilation on windows 0.4 should fail right now with the same error. I need to adapt the project settings still.
Can you manually rerun configure and see if that fixes things? If not, please post configure.log.
Background: auto_ptr had really unintuitive semantics; it's copy operator had a non-const-reference source argument and invalidated the source. Therefore was deprecated in C++11 now that move semantics are awailable. GCC 6 now uses C++11 as default standard, that's what raised the issue in the form of a torrent of warnings. Plus, C++11 is an awesome step forward and should be supported everywhere by now.
By the way, code::blocks compilation on windows 0.4 should fail right now with the same error. I need to adapt the project settings still.
Re: Errors compiling 0.4 on OpenBSD
Ah, nice to know. Always good to learn stuff like that.
Re: Errors compiling 0.4 on OpenBSD
Ok, so still no joy but I think I've found the (or at least a) problem. OpenBSD uses gcc/g++ version 4.2.1 by default which seems to date from 2007 (too early for C++11). I'll install the newest g++ from OpenBSD's packages repository and see if that supports C++11.
Just for you to chew over while I'm doing that, here is config.log, which I've called config.txt because "the extension log is not allowed"
Just for you to chew over while I'm doing that, here is config.log, which I've called config.txt because "the extension log is not allowed"
Playing since December 2006