Index: ui/accelerated_widget_mac/display_link_mac.cc |
diff --git a/ui/accelerated_widget_mac/display_link_mac.cc b/ui/accelerated_widget_mac/display_link_mac.cc |
index d9cc46876f9f53a8aea2e04a668421efe6f5ffd5..8c9072717672b9abf58670011f26879e3a1ab904 100644 |
--- a/ui/accelerated_widget_mac/display_link_mac.cc |
+++ b/ui/accelerated_widget_mac/display_link_mac.cc |
@@ -86,6 +86,13 @@ DisplayLinkMac::DisplayLinkMac( |
DisplayLinkMac::~DisplayLinkMac() { |
StopDisplayLink(); |
+ // Usually |display_link_| holds the last reference to CVDisplayLinkRef, but |
+ // that's not guaranteed, so it might not free all resources after the |
+ // destructor completes. Ensure the callback is cleared out regardless. |
ccameron
2016/01/25 18:04:17
Maybe reference a bug # for the crashes?
tapted
2016/01/26 23:36:49
Done.
|
+ CVReturn ret = |
+ CVDisplayLinkSetOutputCallback(display_link_, nullptr, nullptr); |
+ DCHECK_EQ(kCGErrorSuccess, ret); |
+ |
DisplayMap::iterator found = display_map_.Get().find(display_id_); |
DCHECK(found != display_map_.Get().end()); |
DCHECK(found->second == this); |