fix regression reported by @cyfdecyf in #1454 (#1517)

diff --git a/tests/test_virtual_functions.cpp b/tests/test_virtual_functions.cpp
index 6ffdf33..c9a561c 100644
--- a/tests/test_virtual_functions.cpp
+++ b/tests/test_virtual_functions.cpp
@@ -10,6 +10,7 @@
 #include "pybind11_tests.h"
 #include "constructor_stats.h"
 #include <pybind11/functional.h>
+#include <thread>
 
 /* This is an example class that we'll want to be able to extend from Python */
 class ExampleVirt  {
@@ -157,6 +158,28 @@
     }
 };
 
+static void test_gil() {
+    {
+        py::gil_scoped_acquire lock;
+        py::print("1st lock acquired");
+
+    }
+
+    {
+        py::gil_scoped_acquire lock;
+        py::print("2nd lock acquired");
+    }
+
+}
+
+static void test_gil_from_thread() {
+    py::gil_scoped_release release;
+
+    std::thread t(test_gil);
+    t.join();
+}
+
+
 // Forward declaration (so that we can put the main tests here; the inherited virtual approaches are
 // rather long).
 void initialize_inherited_virtuals(py::module &m);
@@ -416,7 +439,6 @@
 };
 */
 
-
 void initialize_inherited_virtuals(py::module &m) {
     // test_inherited_virtuals
 
@@ -449,4 +471,8 @@
     py::class_<D_Tpl, C_Tpl, PyB_Tpl<D_Tpl>>(m, "D_Tpl")
         .def(py::init<>());
 
+
+    // Fix issue #1454 (crash when acquiring/releasing GIL on another thread in Python 2.7)
+    m.def("test_gil", &test_gil);
+    m.def("test_gil_from_thread", &test_gil_from_thread);
 };
diff --git a/tests/test_virtual_functions.py b/tests/test_virtual_functions.py
index 2a92476..5ce9abd 100644
--- a/tests/test_virtual_functions.py
+++ b/tests/test_virtual_functions.py
@@ -369,3 +369,9 @@
     assert obj.unlucky_number() == -7
     assert obj.lucky_number() == -1.375
     assert obj.say_everything() == "BT -7"
+
+
+def test_issue_1454():
+    # Fix issue #1454 (crash when acquiring/releasing GIL on another thread in Python 2.7)
+    m.test_gil()
+    m.test_gil_from_thread()