diff --git a/src/if_lua.c b/src/if_lua.c
index 21f66e9bf211f6c0467f9aa441a45a4834aafecb..35ee3002c66bf7e605d3910c4f839efa7a83fb0c 100644
--- a/src/if_lua.c
+++ b/src/if_lua.c
@@ -1122,6 +1122,12 @@ luaV_setrange(lua_State *L, int line1, int line2)
 
 static lua_State *L = NULL;
 
+    static int
+lua_is_open(void)
+{
+    return L != NULL;
+}
+
     static int
 lua_init(void)
 {
@@ -1240,7 +1246,7 @@ ex_luafile(exarg_T *eap)
     void
 lua_buffer_free(buf_T *buf)
 {
-    if (lua_init() == FAIL) return;
+    if (!lua_is_open()) return;
     luaV_getfield(L, LUAVIM_FREE);
     lua_pushlightuserdata(L, (void *) buf);
     lua_call(L, 1, 0);
@@ -1250,7 +1256,7 @@ lua_buffer_free(buf_T *buf)
     void
 lua_window_free(win_T *win)
 {
-    if (lua_init() == FAIL) return;
+    if (!lua_is_open()) return;
     luaV_getfield(L, LUAVIM_FREE);
     lua_pushlightuserdata(L, (void *) win);
     lua_call(L, 1, 0);