Clear frame cache when activating a fiber
[folly.git] / folly / fibers / scripts / gdb.py
index da84f3c9c235017f2b4c4a7dbbbaa90cdcb4c795..6c95738dd5e94f7b16b62669c4d4d56d656b5f57 100644 (file)
@@ -77,7 +77,8 @@ class GetFiberXMethodWorker(gdb.xmethod.XMethodWorker):
 
 class GetFiberXMethodMatcher(gdb.xmethod.XMethodMatcher):
     def __init__(self):
-        super(GetFiberXMethodMatcher, self).__init__("Fiber address method matcher")
+        super(GetFiberXMethodMatcher, self).__init__(
+            "Fiber address method matcher")
         self.worker = GetFiberXMethodWorker()
 
     def match(self, class_type, method_name):
@@ -246,13 +247,15 @@ class FiberUnwinder(gdb.unwinder.Unwinder):
         return unwind_info
 
 
-def fiber_activate(fiber_ptr):
+def fiber_activate(fiber):
     fiber_type = gdb.lookup_type("folly::fibers::Fiber")
-    fiber = fiber_ptr.cast(fiber_type.pointer()).dereference()
+    if fiber.type != fiber_type:
+        fiber = fiber.cast(fiber_type.pointer()).dereference()
     if not FiberPrinter(fiber).backtrace_available():
         return "Can not activate a non-waiting fiber."
+    gdb.invalidate_cached_frames()
     FiberUnwinder.set_fiber(fiber)
-    return "Fiber " + str(fiber_ptr) + " activated. You can call 'bt' now."
+    return "Fiber 0x{:12x} activated. You can call 'bt' now.".format(int(fiber.address))
 
 
 def fiber_deactivate():