diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go
index 7645f04e4fe68cb8b808bf2f7b0ee85114e897af..5e46042ae4bafd0c3119a22bd2df97d304f5159b 100644
--- a/eth/downloader/downloader_test.go
+++ b/eth/downloader/downloader_test.go
@@ -569,7 +569,7 @@ func testThrottling(t *testing.T, protocol int, mode SyncMode) {
 		<-proceed
 	}
 	// Start a synchronisation concurrently
-	errc := make(chan error)
+	errc := make(chan error, 1)
 	go func() {
 		errc <- tester.sync("peer", nil, mode)
 	}()
diff --git a/miner/worker.go b/miner/worker.go
index d5813c18a866553e8a7c8f037a290774f6398159..5f07affdc412c69ad1dc09cb0d5ae549e2d6ab9d 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -347,7 +347,11 @@ func (w *worker) newWorkLoop(recommit time.Duration) {
 			atomic.StoreInt32(interrupt, s)
 		}
 		interrupt = new(int32)
-		w.newWorkCh <- &newWorkReq{interrupt: interrupt, noempty: noempty, timestamp: timestamp}
+		select {
+		case w.newWorkCh <- &newWorkReq{interrupt: interrupt, noempty: noempty, timestamp: timestamp}:
+		case <-w.exitCh:
+			return
+		}
 		timer.Reset(recommit)
 		atomic.StoreInt32(&w.newTxs, 0)
 	}