From 253281ae5e94be780e52ac1f5b4d33a6d912f38f Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Sun, 28 Jun 2020 16:29:32 -0400 Subject: [PATCH] Add a lock for plugins to use if using async code Ref #1539 --- cmd/micro/initlua.go | 1 + cmd/micro/micro.go | 3 +++ internal/lua/lua.go | 2 ++ 3 files changed, 6 insertions(+) diff --git a/cmd/micro/initlua.go b/cmd/micro/initlua.go index a6d566fc..8b1dca82 100644 --- a/cmd/micro/initlua.go +++ b/cmd/micro/initlua.go @@ -56,6 +56,7 @@ func luaImportMicro() *lua.LTable { ulua.L.SetField(pkg, "Tabs", luar.New(ulua.L, func() *action.TabList { return action.Tabs })) + ulua.L.SetField(pkg, "Lock", luar.New(ulua.L, ulua.Lock)) return pkg } diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index 62b3290c..83b09daa 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -17,6 +17,7 @@ import ( "github.com/zyedidia/micro/v2/internal/action" "github.com/zyedidia/micro/v2/internal/buffer" "github.com/zyedidia/micro/v2/internal/config" + ulua "github.com/zyedidia/micro/v2/internal/lua" "github.com/zyedidia/micro/v2/internal/screen" "github.com/zyedidia/micro/v2/internal/shell" "github.com/zyedidia/micro/v2/internal/util" @@ -344,7 +345,9 @@ func main() { // okay to be inefficient and run it via a function every time // We do this so we can recover from panics without crashing the editor for { + ulua.Lock.Lock() DoEvent() + ulua.Lock.Unlock() } } diff --git a/internal/lua/lua.go b/internal/lua/lua.go index 83b58cd8..644795a6 100644 --- a/internal/lua/lua.go +++ b/internal/lua/lua.go @@ -15,6 +15,7 @@ import ( "regexp" "runtime" "strings" + "sync" "time" "unicode/utf8" @@ -24,6 +25,7 @@ import ( ) var L *lua.LState +var Lock sync.Mutex // LoadFile loads a lua file func LoadFile(module string, file string, data []byte) error {