[prev in list] [next in list] [prev in thread] [next in thread] 

List:       helix-datatype-dev
Subject:    [datatype-dev] CR: Fix for full screen share button crash on Mac
From:       Christina Bailey <cdunn () real ! com>
Date:       2008-01-29 23:12:13
Message-ID: 479FB2CD.9020401 () real ! com
[Download RAW message or body]

Fix for: Bug 211882 Mac/ share button in fullscreen crashes in Safari only

Overview: Ignore paint messages during tear down of Flash instance to 
avoid bad access exception in Safari.
In full screen, if the share button is hit, it will exit out of full 
screen, destroying all of the full screen
objects (UI and postroll flash). During tear down the attached site 
becomes invalid.
This is a quick fix for this problem, maybe. I think the real problem 
may be in the mac site code,
not calling DetachSite soon enough. Crash occurs because of an invalid 
access to the attached site.

Diff:
Index: flash_guest_player_ns.cpp
===================================================================
RCS file: /cvsroot/datatype/flash/flashhost/flash_guest_player_ns.cpp,v
retrieving revision 1.27.2.22
diff -w -u -5 -r1.27.2.22 flash_guest_player_ns.cpp
--- flash_guest_player_ns.cpp    28 Jan 2008 03:37:06 -0000    1.27.2.22
+++ flash_guest_player_ns.cpp    29 Jan 2008 22:57:57 -0000
@@ -237,10 +237,11 @@
 #endif
     , m_pFileSystemManager(NULL)
     , m_ulPacingInterval(FLASH_PACING_INTERVAL)
     , m_ulReadPacingInterval(FLASH_READ_PACING_INTERVAL)
     , m_bTerminated(FALSE)
+    , m_bTerminating(FALSE)
     , m_pOutstandingInvalidRect(NULL)
     , m_bStreamDone(FALSE)
     , m_bIssueCallbackBetweenReads(FALSE)
     , m_dStreamType(NP_NORMAL)
     , m_ulFileOffsetPending(INVALID_FILE_OFFSET)
@@ -324,10 +325,12 @@
     // printf("CFlashGuestPlayerNS::Initialize\n");
 #endif    // _MAC_UNIX
 
     HX_RESULT retVal = HXR_FAIL;
 
+    m_bTerminating = FALSE;
+
     if (pContext)
     {
         // Enable logging
         HX_ENABLE_LOGGING(pContext);
         // Save the context
@@ -1400,10 +1403,12 @@
     if (m_lFlashRefCount == 0)
     {
     return HXR_OK;
     }
 
+    m_bTerminating = TRUE;
+
     HXLOGL4(HXLOG_FPHR, "CFlashGuestPlayerNS::Terminate()");
 
     // Close the player
     Close();
     // Set the player state back to HXGUEST_STATE_PLAYER_CREATED
@@ -2423,11 +2428,12 @@
             npp, pInvalidRect, (pInvalidRect ? pInvalidRect->left : 0),
             (pInvalidRect ? pInvalidRect->top : 0), (pInvalidRect ? 
pInvalidRect->right : 0),
             (pInvalidRect ? pInvalidRect->bottom : 0));
     HXBOOL bHandled = FALSE;
 
-    if (m_PluginFuncs.event == NULL)
+    // If we are destroying the instance, exit gracefully now
+    if (m_PluginFuncs.event == NULL || m_bTerminating)
     {
         return FALSE;
     }
 
     m_pOutstandingInvalidRect = pInvalidRect;
Index: pub/flash_guest_player_ns.h
===================================================================
RCS file: /cvsroot/datatype/flash/flashhost/pub/flash_guest_player_ns.h,v
retrieving revision 1.14.2.9
diff -w -u -5 -r1.14.2.9 flash_guest_player_ns.h
--- pub/flash_guest_player_ns.h    30 Nov 2007 23:24:45 -0000    1.14.2.9
+++ pub/flash_guest_player_ns.h    29 Jan 2008 22:57:57 -0000
@@ -274,10 +274,11 @@
     HXxWindow*        m_pWindow;
     HXxWindow        m_LastSetHxWindow;
     HXxRect        m_WindowSubHxRect;
     HXBOOL        m_bWindowSubHxRectSet;
     HXBOOL        m_bTerminated;
+    HXBOOL        m_bTerminating;
     HXBOOL        m_bStreamDone;
     HXBOOL              m_bIssueCallbackBetweenReads;
     IHXBuffer*        m_pOffscreenBuffer;
     IHXMutex*        m_pMutex;
     IHXFileStat*        m_pFileStat;

_______________________________________________
Datatype-dev mailing list
Datatype-dev@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/datatype-dev
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic