summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.go12
-rw-r--r--worker.go24
2 files changed, 20 insertions, 16 deletions
diff --git a/main.go b/main.go
index 8b32585..5530a06 100644
--- a/main.go
+++ b/main.go
@@ -25,7 +25,7 @@ var debug bool
func main() {
lAddr := flag.String("l", "127.0.0.1:3000", "Address HTTP-server will listen to")
wrksNum := flag.Int("n", runtime.NumCPU(), "Number of HTTP-workers to start")
- dbg := flag.Bool("D", false, "Debug mode")
+ dbg := flag.Bool("D", false, "Debug/development mode")
flag.Parse()
debug = *dbg
@@ -398,15 +398,15 @@ func main() {
module["http"] = httpModule
module["db"] = dbModule
module["utf8"] = utf8Module
- module["repl"] = func (l *Lua) int {
- var repl LuaRef
- err := l.Scan(&repl)
+ module["evalfn"] = func (l *Lua) int {
+ var evalFn LuaRef
+ err := l.Scan(&evalFn)
if err != nil {
return luaErr(l, err)
}
for _, wrk := range wrks {
if wrk.HasSameLua(l) {
- wrk.repl = &repl
+ wrk.evalFn = &evalFn
break
}
}
@@ -461,7 +461,7 @@ func main() {
}
func printUsage() {
- fmt.Printf("usage: %s [luafile]\n", os.Args[0])
+ fmt.Printf("Usage: %s [options] LUAFILE\n", os.Args[0])
flag.PrintDefaults()
os.Exit(2)
}
diff --git a/worker.go b/worker.go
index e7d76e4..c0ccc65 100644
--- a/worker.go
+++ b/worker.go
@@ -40,7 +40,7 @@ type Worker struct {
routes map[string]LuaRef
started bool
mu sync.Mutex
- repl *LuaRef
+ evalFn *LuaRef
}
// NewWorker creates a new instance of Worker type.
@@ -221,12 +221,14 @@ outer:
if !ok {
break outer
}
- resCh <- NewCoroutine(func(yield func(), resume func() bool) {
- handle(r, yield, func () bool {
- resCh <- resume
- return true
- })
- })
+ resCh <- NewCoroutine(
+ func(yield func(), resume func() bool) {
+ handle(r, yield, func () bool {
+ resCh <- resume
+ return true
+ })
+ },
+ )
case resume, ok := <-resCh:
// coroutine executor
if !ok {
@@ -237,12 +239,14 @@ outer:
}
}
-// Eval evaluates the code in the Lua context.
+// Eval evaluates the code in the Lua context. Not safe for execution when
+// there are requests in the processing queue, only meant for development
+// purposes.
func (w *Worker) Eval(code string) error {
w.mu.Lock()
defer w.mu.Unlock()
- if w.repl != nil {
- w.lua.PushFromRef(*w.repl)
+ if w.evalFn != nil {
+ w.lua.PushFromRef(*w.evalFn)
w.lua.PushString(code)
return w.lua.PCall(1, 0, 0)
}