lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


[Windows XP SP3 32 bit, Lua 5.1 and 5.2]

Running various Lua binding DLLs with Microsoft Application Verifier, I noticed that all bindings that are C++ give an error. The error message is: "Unloading DLL that allocated TLS index that was not freed."

Both Lua and the libraries were built with MinGW 4.5.2.
Here is a simple example that reproduces the error.

/* mylib.cpp */
extern "C" {
#include <lua.h>
}

extern "C" __declspec(dllexport)
int luaopen_mylib (lua_State *L)
{
  char* buf = new char;
  delete buf;
  return 0;
}

-- test.lua
require "mylib"
print "OK" --> it prints OK

Here is the log of Application Verifier:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<avrf:logfile xmlns:avrf="Application Verifier">
<avrf:logSession TimeStarted="2012-04-27 : 15:10:26" PID="3012" Version="2"> <avrf:logEntry Time="2012-04-27 : 15:10:26" LayerName="TLS" StopCode="0x350" Severity="Error"> <avrf:message>Unloading DLL that allocated TLS index that was not freed.</avrf:message>
			<avrf:parameter1>4abba - TLS index</avrf:parameter1>
<avrf:parameter2>6e58a0cd - Address of the code that allocated this TLS index.</avrf:parameter2> <avrf:parameter3>153cfe6 - DLL name address. Use du to dump it.</avrf:parameter3>
			<avrf:parameter4>6e580000 - DLL base address.</avrf:parameter4>
			<avrf:stackTrace>
<avrf:trace>vfbasics!AVrfpCheckAndFreeDllLeakedTlsSlots+62 (d:\avrf\source\base\avrf\vrfcommon\dlls.c @ 1204)</avrf:trace> <avrf:trace>vfbasics!AVrfpDllUnloadCallback+51 (d:\avrf\source\base\avrf\vrfcommon\dlls.c @ 554)</avrf:trace> <avrf:trace>ntdll!RtlQueryProcessDebugInformation+117e ( @ 0)</avrf:trace>
				<avrf:trace>ntdll!RtlDeleteAce+4c05 ( @ 0)</avrf:trace>
<avrf:trace>vfbasics!AVrfpLdrUnloadDll+5d (d:\avrf\source\base\avrf\vrfcommon\dlls.c @ 1393)</avrf:trace>
				<avrf:trace>kernel32!FreeLibrary+19 ( @ 0)</avrf:trace>
				<avrf:trace>lua52!luaopen_table+f46 ( @ 0)</avrf:trace>
				<avrf:trace>lua52!lua_getinfo+11f6 ( @ 0)</avrf:trace>
				<avrf:trace>lua52!lua_getinfo+1477 ( @ 0)</avrf:trace>
				<avrf:trace>lua52!lua_yieldk+13d7 ( @ 0)</avrf:trace>
				<avrf:trace>lua52!lua_getinfo+9e2 ( @ 0)</avrf:trace>
				<avrf:trace>lua52!lua_yieldk+c5 ( @ 0)</avrf:trace>
				<avrf:trace>lua52!lua_yieldk+131b ( @ 0)</avrf:trace>
				<avrf:trace>lua52!lua_yieldk+139d ( @ 0)</avrf:trace>
				<avrf:trace>lua52!lua_yieldk+2230 ( @ 0)</avrf:trace>
				<avrf:trace>lua52!lua_yieldk+7054 ( @ 0)</avrf:trace>
				<avrf:trace>lua52!+402349 ( @ 0)</avrf:trace>
				<avrf:trace>lua52!+4010db ( @ 0)</avrf:trace>
				<avrf:trace>lua52!+401178 ( @ 0)</avrf:trace>
				<avrf:trace>kernel32!RegisterWaitForInputIdle+49 ( @ 0)</avrf:trace>
			</avrf:stackTrace>
		</avrf:logEntry>
	</avrf:logSession>
</avrf:logfile>

Any comments please?

--
Shmuel