kwolekr [Sat, 31 Oct 2015 20:31:43 +0000 (16:31 -0400)]
Fix Lua scripting synchronization
For several years now, the lua script lock has been completely broken.
This commit fixes the main issue (creation of a temporary rather than
scoped object), and fixes a subsequent deadlock issue caused by
nested script API calls by adding support for recursive mutexes.
kwolekr [Sun, 1 Nov 2015 16:16:18 +0000 (11:16 -0500)]
Fix Noise compiled under clang >= 3.7.x with -O2 or higher
When compiled with optimizations, the most recent versions of clang seem
to 'optimize' out a crucial "and %reg, 0x7FFFFFFF" instruction in noise2d(),
probably because it somehow assumed the variable n would never become greater
than that amount.
Indeed, signed integer underflow is undefined behavior in C and C++, so while
this optimization is "correct" in that sense, it breaks lots of existing code.
Solved by changing n to an unsigned type, making behavior well-defined.
ShadowNinja [Thu, 29 Oct 2015 18:48:10 +0000 (14:48 -0400)]
Fix server crashing on Lua errors
Previously, the server called FATAL_ERROR when a Lua error occured.
This caused a (mostly useless) core dump.
The server now simply throws an exception, which is caught and printed before
exiting with a non-zero return value.
This also fixes a number of instances where errors were logged multiple times.
paramat [Thu, 29 Oct 2015 00:17:48 +0000 (00:17 +0000)]
findSpawnPos: Add setting for max height above water level
Increase default from 6 to 16 to help with mgv7 and mgfractal
Large-scale or alternative mapgens can result in a lowland spawn point not
being found, causing a spawn at (0, 0, 0) possibly buried underground
The max height is now settable to allow correct player spawn
in any mapgen or when using custom noise parameters
kwolekr [Tue, 27 Oct 2015 06:51:43 +0000 (02:51 -0400)]
Add DISABLE_CLASS_COPY macro (and use it)
Use this macro to disallow copying of an object using the assignment
operator or copy constructor. This catches otherwise silent-but-deadly
mistakes such as "ServerMap map = env->getMap();" at compile time.
If so desired, it is still possible to copy a class, but it now requires
an explicit call to memcpy or std::copy.
est31 [Tue, 27 Oct 2015 20:03:59 +0000 (21:03 +0100)]
Environment: Time of day fixes and add serverside getter
-> Put access to time variables under the time lock.
-> Merge both time locks, there is no point to have two locks.
-> Fix the lock being released too early in Environment::setTimeOfDay
-> Add serverside getter so that you don't have to get
the environment if you only have the server
est31 [Sat, 24 Oct 2015 22:01:57 +0000 (00:01 +0200)]
Fix out of bounds vector write in Logger::addOutput(ILogOutput *out)
Previously, the invocation of Logger::addOutput(ILogOutput *out) led to
an out of bounds write of the m_outputs vector, resulting in the
m_silenced_levels array being modified.
Fortunately, the only caller of that method was android system logging,
and only since a few commits ago.
est31 [Sat, 24 Oct 2015 10:52:14 +0000 (12:52 +0200)]
Small logging refactor and additional options
-> Get rid of Logger::logToSystem and use normal downstream output system for android instead
-> Give the downstream output system more information: enrich the log function of ILogOutput
with information and add ICombinedLogOutput for easier use.
-> Make Logger::getLevelLabel() static and public so that it can be used by downstream log output.
PilzAdam [Sun, 18 Oct 2015 08:41:52 +0000 (10:41 +0200)]
Improve Lua settings menu
* Add key settings to setting table and ignore them later
This way they are added to the auto-generated minetest.conf.example
* Add flags type
* Add input validation for int, float and flags
* Break in-game graphic settings into multiple sections
* Parse settingtpes.txt in mods and games
* Improve description for a lot of settings
* Fix typos and wording in settingtypes.txt
* Convert language setting to an enum
est31 [Sat, 24 Oct 2015 06:20:42 +0000 (08:20 +0200)]
Flush rollback log more often
Flushes the buffer of rollback actions that wait to get saved in two more situations:
1. Flushes in the destructor of the rollback. This makes the server not
forget the last < 500 rollback entries when it shuts down.
2. Flushes the rollback when /rollback_check is invoked. This is neccessary
as otherwise it leads to confusion if users want to test the rollback functionality
by placing a node and then executing the check on it, or if the actions were
very recent out of other reasons.
est31 [Sun, 18 Oct 2015 00:29:06 +0000 (02:29 +0200)]
Remove wstrgettext
Everywhere where wstrgettext was used, its output was converted back
to utf8. As wstrgettext internally converts the return value
from utf8 to wstring, it has been a waste. Remove the function, and
use strgettext instead.
Kahrl [Sat, 17 Oct 2015 21:34:45 +0000 (23:34 +0200)]
Fix GUITable selection issues with trees
- setOpenedTrees(): this internal function was calling setSelected()
to update m_selected. Since setSelected() calls autoScroll(),
this caused the scrollbar to scroll back to the selected row
in some cases when that shouldn't be done.
For example, clicking the "+" to open a tree caused autoscroll.
Fix this by making setOpenedTrees() modify m_selected directly.
- setDynamicData(): set scrollbar position after calling
setSelected(), not before. This avoids setSelected()'s autoscroll
messing up the scrollbar position again.
- setSelected(): If an invisible row is selected, open all parents
of the selected row in order to make the selected row visible.
This fixes the issue where all the trees are closed again whenever
you return from the setting edit dialog to the settings tab.
kwolekr [Sat, 17 Oct 2015 03:43:29 +0000 (23:43 -0400)]
Refactor Thread class to improve readability and portability
- Fix some incompatibilities with obscure platforms (AIX and WinCE)
- Clean up Thread class interface
- Add m_ prefix to private member variables
- Simplify platform-dependent logic, reducing preprocessor
conditional clauses and improving readibility
- Add Thread class documentation
est31 [Fri, 16 Oct 2015 23:01:12 +0000 (01:01 +0200)]
Fix crash regression when invsize formspec gets used
The invsize formspec element is outdated. Even though,
it is still supported, only a deprecation warning is shown,
introduced by commit [1]. The lua context passed to the
log_deprecated method added by commit [1] is NULL for the
invsize deprecation warning, as its run on the client and not
the server.
Commit [1] has removed checks for NULL inside the log_deprecated
method, resulting in a crash when a formspec with an invsize
element is parsed. This commit puts the check back.
didn't fix the issue for "client" instances, where the nametag update
was received before the object was added to the scene. This resulted
in the grey shadow on the nametag that commit tried to fix.
Thanks to @neoascetic for pointing out that there still is a shadow.
ShadowNinja [Tue, 13 Oct 2015 07:57:44 +0000 (03:57 -0400)]
Refactor logging
- Add warning log level
- Change debug_log_level setting to enumeration string
- Map Irrlicht log events to MT log events
- Encapsulate log_* functions and global variables into a class, Logger
- Unify dstream with standard logging mechanism
- Unify core.debug() with standard core.log() script API
Kahrl [Mon, 12 Oct 2015 19:25:11 +0000 (21:25 +0200)]
Fix how address is logged when a wrong password is supplied
- SRP: print the address only once, not twice
- Legacy: previously the address was not printed at all
- Make both messages structurally the same, to facilitate log analyzers
paramat [Sun, 11 Oct 2015 17:11:09 +0000 (18:11 +0100)]
Mgfractal: Independant offset and slice params for mandelbrot and julia
Player now spawns on julia set due to julia offset
Add commented-out '#include profiler.h' for timetaker use
Use v3fs to reduce number of parameters
Tune tunnel width to match mgv7
est31 [Sat, 10 Oct 2015 15:07:53 +0000 (17:07 +0200)]
Clear list rings when loading a new formspec
Fixes a bug where the old list ring remained when a new formspec
was displayed over the old one. This created the list-ring of the new formspec
to be partly ignored.
Thanks to @VanessaE to report the bug, and @DonBatman to produce the code that
exposed it.