fix for virtual dispatch on newly created threads
diff --git a/docs/changelog.rst b/docs/changelog.rst
index 57c4dc0..92b2367 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -10,7 +10,9 @@
 * Added a convenience routine ``make_iterator()`` which turns a range indicated
   by a pair of C++ iterators into a iterable Python object
 * Added ``len()`` and a variadic ``make_tuple()`` function
-* Addressed a rare issue that could confuse the current virtual function dispatcher
+* Addressed a rare issue that could confuse the current virtual function
+  dispatcher and another that could lead to crashes in multi-threaded
+  applications
 * Added a ``get_include()`` function to the Python module that returns the path
   of the directory containing the installed pybind11 header files
 * Documentation improvements: import issues, symbol visibility, pickling, limitations
diff --git a/include/pybind11/pybind11.h b/include/pybind11/pybind11.h
index 00c36dc..22044fe 100644
--- a/include/pybind11/pybind11.h
+++ b/include/pybind11/pybind11.h
@@ -1070,7 +1070,7 @@
 
     /* Don't call dispatch code if invoked from overridden function */
     PyFrameObject *frame = PyThreadState_Get()->frame;
-    if ((std::string) pybind11::handle(frame->f_code->co_name).str() == name &&
+    if (frame && (std::string) pybind11::handle(frame->f_code->co_name).str() == name &&
         frame->f_code->co_argcount > 0) {
         PyFrame_FastToLocals(frame);
         PyObject *self_caller = PyDict_GetItem(