Prechádzať zdrojové kódy

repl.Stop() to only if running, fixes panic after js> exit followed by interrupt

zelig 11 rokov pred
rodič
commit
6763d28a17
1 zmenil súbory, kde vykonal 23 pridanie a 15 odobranie
  1. 23 15
      ethereum/repl.go

+ 23 - 15
ethereum/repl.go

@@ -23,6 +23,8 @@ type JSRepl struct {
 	prompt string
 
 	history *os.File
+
+	running bool
 }
 
 func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
@@ -35,26 +37,32 @@ func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
 }
 
 func (self *JSRepl) Start() {
-	logger.Infoln("init JS Console")
-	reader := bufio.NewReader(self.history)
-	for {
-		line, err := reader.ReadString('\n')
-		if err != nil && err == io.EOF {
-			break
-		} else if err != nil {
-			fmt.Println("error reading history", err)
-			break
+	if !self.running {
+		self.running = true
+		logger.Infoln("init JS Console")
+		reader := bufio.NewReader(self.history)
+		for {
+			line, err := reader.ReadString('\n')
+			if err != nil && err == io.EOF {
+				break
+			} else if err != nil {
+				fmt.Println("error reading history", err)
+				break
+			}
+
+			addHistory(line[:len(line)-1])
 		}
-
-		addHistory(line[:len(line)-1])
+		self.read()
 	}
-	self.read()
 }
 
 func (self *JSRepl) Stop() {
-	self.re.Stop()
-	logger.Infoln("exit JS Console")
-	self.history.Close()
+	if self.running {
+		self.running = false
+		self.re.Stop()
+		logger.Infoln("exit JS Console")
+		self.history.Close()
+	}
 }
 
 func (self *JSRepl) parseInput(code string) {