From 8642a4a559d44de11c7dd1099956ae18928a192c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 3 Jun 2014 20:58:10 +0200 Subject: [PATCH] Another go at fixing that native crash, better luck this time? --- .../assets/opencomputers/loot/OpenOS/boot/01_os.lua | 2 +- src/main/resources/assets/opencomputers/lua/kernel.lua | 6 ++++-- src/main/scala/li/cil/oc/common/tileentity/Robot.scala | 2 +- .../oc/server/component/machine/luac/UserdataAPI.scala | 8 -------- .../oc/server/component/machine/luaj/UserdataAPI.scala | 6 ------ 5 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/01_os.lua b/src/main/resources/assets/opencomputers/loot/OpenOS/boot/01_os.lua index 33f25cd75..019eda876 100644 --- a/src/main/resources/assets/opencomputers/loot/OpenOS/boot/01_os.lua +++ b/src/main/resources/assets/opencomputers/loot/OpenOS/boot/01_os.lua @@ -10,7 +10,7 @@ local env = { MANPATH="/usr/man:.", PAGER="/bin/more", PATH="/bin:/usr/bin:/home/bin:.", - PS1="# ", + PS1="$PWD# ", PWD="/", SHELL="/bin/sh", TMP="/tmp", -- Depricated diff --git a/src/main/resources/assets/opencomputers/lua/kernel.lua b/src/main/resources/assets/opencomputers/lua/kernel.lua index 7d18bd210..9210c90e6 100644 --- a/src/main/resources/assets/opencomputers/lua/kernel.lua +++ b/src/main/resources/assets/opencomputers/lua/kernel.lua @@ -306,7 +306,9 @@ local userdataWrapper = { return processResult(table.pack(userdata.call(wrappedUserdata[self], processArguments(...)))) end, __gc = function(self) - userdata.dispose(wrappedUserdata[self]) + local data = wrappedUserdata[self] + wrappedUserdata[self] = nil + userdata.dispose(data) end, -- This is the persistence protocol for userdata. Userdata is considered -- to be 'owned' by Lua, and is saved to an NBT tag. We also get the name @@ -350,7 +352,7 @@ function wrapSingleUserdata(data) for k, v in pairs(wrappedUserdata) do -- We need a custom 'equals' check for userdata because metamethods on -- userdata introduced by JNLua tend to crash the game for some reason. - if userdata.equal(v, data) then + if v == data then return k end end diff --git a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala index 9f58db293..405994ac5 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/Robot.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/Robot.scala @@ -202,7 +202,7 @@ class Robot(val isRemote: Boolean) extends traits.Computer with traits.PowerInfo def isAnimatingTurn = animationTicksLeft > 0 && turnAxis != 0 - def animateSwing(duration: Double) = { + def animateSwing(duration: Double) = if (items(0).isDefined) { setAnimateSwing((duration * 20).toInt) ServerPacketSender.sendRobotAnimateSwing(this) } diff --git a/src/main/scala/li/cil/oc/server/component/machine/luac/UserdataAPI.scala b/src/main/scala/li/cil/oc/server/component/machine/luac/UserdataAPI.scala index 22f24bf92..2867dc88f 100644 --- a/src/main/scala/li/cil/oc/server/component/machine/luac/UserdataAPI.scala +++ b/src/main/scala/li/cil/oc/server/component/machine/luac/UserdataAPI.scala @@ -103,14 +103,6 @@ class UserdataAPI(owner: NativeLuaArchitecture) extends NativeLuaAPI(owner) { }) lua.setField(-2, "doc") - lua.pushScalaFunction(lua => { - val value1 = lua.toJavaObjectRaw(1) - val value2 = lua.toJavaObjectRaw(2) - lua.pushBoolean(value1.isInstanceOf[Value] && value2.isInstanceOf[Value] && value1 == value2) - 1 - }) - lua.setField(-2, "equal") - lua.setGlobal("userdata") } } diff --git a/src/main/scala/li/cil/oc/server/component/machine/luaj/UserdataAPI.scala b/src/main/scala/li/cil/oc/server/component/machine/luaj/UserdataAPI.scala index 11a816b84..297be171b 100644 --- a/src/main/scala/li/cil/oc/server/component/machine/luaj/UserdataAPI.scala +++ b/src/main/scala/li/cil/oc/server/component/machine/luaj/UserdataAPI.scala @@ -59,12 +59,6 @@ class UserdataAPI(owner: LuaJLuaArchitecture) extends LuaJAPI(owner) { owner.documentation(() => machine.documentation(value, method)) }) - userdata.set("equal", (args: Varargs) => { - val value1 = args.checkuserdata(1, classOf[Value]) - val value2 = args.checkuserdata(2, classOf[Value]) - LuaValue.valueOf(value1.isInstanceOf[Value] && value2.isInstanceOf[Value] && value1 == value2) - }) - lua.set("userdata", userdata) } }