ProjectsWhat's NewDownloadsCommunitySupportCompany
Forum Index » S.T.A.L.K.E.R.: Clear Sky Forum » Mod discussion
Modified LuaJIT library

« Previous 10 events | 1 2 3 4 5 6 | Next 10 events »| All Messages
Posted by/on
Question/AnswerMake Oldest Up Sort by Ascending
  17:05:45  6 February 2014
profilee-mailreply Message URLTo the Top
Bangalore
Robberbaron
(Resident)

 

 
On forum: 02/17/2008
 

Message edited by:
Bangalore
02/06/2014 17:07:13
Messages: 1159
Yeah, Xetrill, sorry for the pressure we do here , but since i discovered your posts in Smoq2's faction war topic, and first time in my life i succesfully compiled a binary file which works in COP, i became a huge fan of your dll's, so i started this thread in COP forum section:

https://www.gsc-game.com/index.php?t=community&s=forums&s_game_type=xr3&thm_page=69&thm_id=6030&sec_id=18&page=1

Thanks for your work again.
  15:43:11  6 February 2014
profilee-mailreply Message URLTo the Top
Xetrill
(Senior)
 
On forum: 07/08/2008
Messages: 129
That's good to know, thanks.
It was me being overly pedantic, that caused the DLL not to work out of the box with CoP. I reverted to the default behavior, so it will just work now.

And to let everyone know, I'm still working on this project. Recently though, I've been pretty busy. That being said, I kinda miss this little project -- LuaJIT is quite a nice codebase to work with. Also there isn't all that much work needed to for a 1.0 release. I might get it done this or next weekend.

We'll see, cheers.
  04:53:21  6 February 2014
profilee-mailreply Message URLTo the Top
Alundaio
Sad Clown
(Resident)

 

 
On forum: 04/05/2010
 

Message edited by:
Alundaio
02/06/2014 4:58:07
Messages: 2230
Thanks Xetril. The guys at Epicstalker forums really appreciate this new version since it works for Call of Pripyat and has given good boost in FPS in Pripyat Reborn. Keep up the good work.

Also thanks for the tip about my crash. It was related to hear_callback.
  00:10:53  4 January 2014
profilee-mailreply Message URLTo the Top
Xetrill
(Senior)
 
On forum: 07/08/2008
 

Message edited by:
Xetrill
01/04/2014 1:49:05
Messages: 129

---QUOTATION---
Can you explain how I dump that information to the log? The log is empty for me, do I need flush stdout?
---END QUOTATION---


No, just make sure you use the debug version (debug\bin\lua.JIT.1.1.4.dll), it will output data regardless if an error occurred or not, letting you know if it's working.

In the future I might add a launcher that captures stdout, but for now cmd.exe is good enough.

Update
New version up (link in signature) which passes all my test cases so far. I removed table.joinall since that was the cause of that odd error, I still don't get it...
Anyway, note that most of the table.* functions don't have test cases yet.

I've also enabled a atexit function/handler, which kinda works like it's C equivalent.
You can define a global function called 'atexit' and it gets called when Lua exists either cleanly or by error.
Its signature looks as follows: atexit(error_object, from_error, from_pcall).
error_object: is whatever was at the top of the stack (only relevant if from_error is true).
from_error: boolean; true if exiting due to an error false otherwise
from_pcall: boolean; true if Lua is in protected mode (by calling either pcall or xpcall) false otherwise.
I've included a sample implementation in common\scripts\_G.script:946.
The important thing about this function is, it gets called ALWAYS regardless of really anything. It doesn't matter if the game or luabind sets its own error handler.

This version also dumps the whole Lua library into the log to allow looking up function information.
  23:28:52  3 January 2014
profilee-mailreply Message URLTo the Top
Alundaio
Sad Clown
(Resident)

 

 
On forum: 04/05/2010
 

Message edited by:
Alundaio
01/03/2014 23:31:34
Messages: 2230

---QUOTATION---
Now, the added information comes in form of a Lua C stack dump, which represents the VM's state and the immediate code-path that lead to an error.
---END QUOTATION---



Can you explain how I dump that information to the log? The log is empty for me, do I need flush stdout?



---QUOTATION---
Other than that, I can tell you the error relates to Lua's coroutine library (specifically coroutine.resume). And that Lua/LuaJIT don't create any semaphores themselves, but they do create and use fibers (to implement coroutines).
I've never used fibers myself, so I can only guess that the error might be caused by either repeatably trying to resume an already resumed/running fiber or requesting the fiber to resume over and over and not waiting for it to actually happen.
Also it's most likely that game_object's event system (set_callback) is using fibers/coroutines.
---END QUOTATION---



Thank you, that is helpful. Seems to be related to when something dies or is shot. So I should look for any errors in the hit_callback or death_callback.
  14:02:28  3 January 2014
profilee-mailreply Message URLTo the Top
Xetrill
(Senior)
 
On forum: 07/08/2008
 

Message edited by:
Xetrill
01/03/2014 14:04:41
Messages: 129
Yes, and it already does, to stdout. Since windows ignores the stdout/stderr streams be default (for non-console apps) you'll need to redirect those (stdout suffices, I'm not using stderr).

This is how, I launch the game:

@echo off
erase /f /q .\appdata\logs\*.mdmp
erase /f /q .\appdata\logs\Xs_*.log
.\bin\xrEngine.exe > .\appdata\logs\xrEngine.log


appdata is $app_data_root$ which I changed in fsgame.ltx, but that doesn't really matter.

Now, the added information comes in form of a Lua C stack dump, which represents the VM's state and the immediate code-path that lead to an error. It isn't the most obvious way to display that information, but it's what Lua actually processes.
"The Stack": http://www.lua.org/manual/5.1/manual.html#3.1

I'm not sure how much more info I can gather, Lua doesn't provide much facilities here. And worse yet, LuaJIT disables what is there (the hooking mechanism).
There is however _G.jit.debug().
Here's the relevant snippet from the LuaJIT's 1.1.8 documentation (which comes with the source code, AFAIK it's not available online anymore):

---QUOTATION---

jit.debug([level])

Set the debug level for JIT compilation. If no level is given, the maximum debug level is set.

Level 0 disables debugging: no checks for hooks are compiled into the code. This is the default when LuaJIT is started and provides the maximum performance.
Level 1 enables function call debugging: call hooks and return hooks are checked in the function prologue and epilogue. This slows down function calls somewhat (by up to 10%).
Level 2 enables full debugging: all hooks are checked. This slows down execution quite a bit, even when the hooks are not active.

Note that some compiler optimizations are turned off when debugging is enabled.

---END QUOTATION---



Other than that, I can tell you the error relates to Lua's coroutine library (specifically coroutine.resume). And that Lua/LuaJIT don't create any semaphores themselves, but they do create and use fibers (to implement coroutines).
I've never used fibers myself, so I can only guess that the error might be caused by either repeatably trying to resume an already resumed/running fiber or requesting the fiber to resume over and over and not waiting for it to actually happen.
Also it's most likely that game_object's event system (set_callback) is using fibers/coroutines.

Lastly, note that the debug version of the DLL spits out a lot more data (but it doesn't enter LuaJIT's debug mode -- jit.debug).
  02:21:46  3 January 2014
profilee-mailreply Message URLTo the Top
Alundaio
Sad Clown
(Resident)

 

 
On forum: 04/05/2010
Messages: 2230
Is it possible to add debugging features to the dll so that you retrieve a bit more info on a lua.jit.dll crash? For example I have someone experiencing a rare bug that crashes with:


0023:728CAEF3 lua.JIT.1.1.4.dll, lua_resume()

[error][ 298] : Too many posts were made to a semaphore.



I have no idea how to debug it, because it's intermittent. I was able to get my hands on a save where it supposedly happened 100% of the time for the tester but when I tried it, nothing happened.
  18:39:32  1 January 2014
profilee-mailreply Message URLTo the Top
Mac34
Senior Resident
 

 
On forum: 03/10/2013
Messages: 313
Thanks Xetrill. I'll give this a whirl, good luck with your work!
  22:41:38  31 December 2013
profilee-mailreply Message URLTo the Top
Jketiynu
Swartz
(Resident)

 

 
On forum: 04/05/2007
Messages: 867
Just wanted to confirm that making the changes mentioned in _G.script works for COP too and this LuaJit now runs with COP.
  19:53:24  31 December 2013
profilee-mailreply Message URLTo the Top
Xetrill
(Senior)
 
On forum: 07/08/2008
 

Message edited by:
Xetrill
12/31/2013 23:02:54
Messages: 129
Mac34 It's not really meant to be used for anything other than experimentation, and aimed at modders. At least for now.

It's not need anyway, the vast majority of performance enhancements will come from new or changed APIs, which require modders to make use of them.

To be a bit more technical, yes you can make it work. If you patch up some things in Lua. See, STALKER uses some deprecated functions from earlier Lua versions*. I didn't like that very much, so I changed all of them, and verified by disabling the compatibility back porting.

If you're still reading, here's how to make it work regardless:
1. open gamedata\scripts\_g.script from the game's install directory with a text editor.
2. at the very first line add this line (without the quotes): "string.gfind = string.gmatch; math.mod = math.fmod"
3. save and try again.

* string.gfind was renamed string.gmatch
math.mod was renamed math.fmod and the %-operator was introduced

Progress update
Since I'm already here, I've fixed 'join' (all variations), it turned out it never had any problems, my test code did... Also, string/buffer.split is now fully implemented, it needed a custom implementation instead of relying on C's stdlib to capture empty tokens. Which lead to a rather simple yet really fast routine.

And the bad news, my latest builds suffer from (Lua C) stack corruption. That's bad, the stack is what keeps order in Lua and it's how everything interacts with it.
I've already put about 8 hours into finding why and fixing it, without much to show for it.
Now, the good thing about that is, that I clearly screwed something up and as a result of that future versions will be more robust, with lots of new checks in place (in debug builds).
 
Each word should be at least 3 characters long.
Search:    
Search conditions:    - spaces as AND    - spaces as OR   
 
Forum Index » S.T.A.L.K.E.R.: Clear Sky Forum » Mod discussion
 

All short dates are in Month-Day-Year format.


 

Copyright © 1995-2022 GSC Game World. All rights reserved.
This site is best viewed in Internet Explorer 4.xx and up and Javascript enabled. Webmaster.
Opera Software products are not supported.
If any problem concerning the site functioning under Opera Software appears apply
to Opera Software technical support service.