[prev in list] [next in list] [prev in thread] [next in thread]
List: helix-clientapps-cvs
Subject: [Clientapps-cvs]
From: anuj_dhamija () helixcommunity ! org
Date: 2008-02-25 20:01:20
Message-ID: 200802252001.m1PK1ogY021016 () mailer ! progressive-comp ! com
[Download RAW message or body]
Update of /cvsroot/clientapps/symbianMmf/audiocontroller
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv22178
Modified Files:
hxmmfaudioctrl.cpp
Log Message:
"Nokia submits this code under the terms of a commercial contribution agreement with \
RealNetworks, and I am authorized to contribute this code under said agreement."
Ref: TSW EVFG-7B6CT9
Modified by: ext-anuj.dhamija@nokia.com
Date: 02/05/2008
Project: SymbianMmf_rel
Synopsis: Playing an Invalid/Corrupt/Unsupported Audio File with Helix Audio \
Controller causes Helix to crash.
Overview:
Inside CHXAudioController::AddDataSourceL method m_pDataSource is initialized to \
instance of CASynchronousMultiReader which internally creates an object of \
CASynchronousReader wherein address of the reference to the source (passed as \
argument of AddDataSourceL) method is stored. Since file is not supported, \
AddDataSourceL function leaves with call to User::Leave causing trap at Framework \
(CMMFController). On getting error, Framework deletes the source as part of deletion \
of CMMFDataSourceHolder object. This causes the pointer to this source inside \
CASynchronousReader object to become dangling. Consequent call to the destructor of \
CASynchronousReader object (as part of releasing of resources) causes the crash when \
this pointer is used to access some member method (SinkThreadLogoff method of \
CMMFClip).
Fix:
Before CHXAudioController invokes User::Leave in case of unsuccessful return of \
AddDataSourceL, instruct m_pDataSource to reset the data source pointer to NULL \
across all the components to which the reference is passed. This ensures that no \
further operations on this particular source pointer is performed in following \
cleanup.
Files modified & changes:
\common\fileio\pub\platform\symbian\asynchronousmultireader.h
- New method Close() CAReadingScheduler which further invokes Close method of \
ASynchronousReader object (m_pReader) \
\common\fileio\pub\platform\symbian\asynchronousmultireader.cpp
- CAsynchronousMultiReader::Close() : Invoke Close() method on AReadingScheduler \
instance
- CAsynchronousReader::Close : set CMMFClip instance m_pImpl to NULL
\clientapps\symbianMmf\audiocontroller\hxmmfaudioctrl.cpp
- CHXAudioController::AddDataSourceL(): invoke Close() on m_pDataSource before \
calling User::Leave
Unit Testing:
A) Play an Corrupt/unsupported Real Media Audio file. Message "Invalid Clip" is \
displayed and no crash. B) Play a valid Real Media Audio File. It plays fine.
Image Size and Heap Use impact: None
Module Release testing (STIF, Audio) : Passed
Test case(s) Added : No
Memory leak check performed : Passed, No leaks found
Platforms and Profiles Build Verified: helix-client-s60-32-mmf-mdf-arm
Platforms and Profiles Functionality verified: armv5
Branch: Head, 221Cays & 210CayS
Index: hxmmfaudioctrl.cpp
===================================================================
RCS file: /cvsroot/clientapps/symbianMmf/audiocontroller/hxmmfaudioctrl.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- hxmmfaudioctrl.cpp 8 Feb 2008 18:37:30 -0000 1.23
+++ hxmmfaudioctrl.cpp 25 Feb 2008 20:01:15 -0000 1.24
@@ -937,6 +937,14 @@
{
HXLOGL1( HXLOG_SMMF,
"CHXAudioController::AddDataSourceL() Failed : %d", lError);
+ //Before control is passed back to Framework as result of Leave
+ //close the data source so as to set the souce pointers to NULL
+ //Framework delets the source on error and setting these to NULL
+ //ensures no cleanup operations are performed when resources are released
+ if(m_pDataSource)
+ {
+ m_pDataSource->Close();
+ }
User::Leave(lError);
}
_______________________________________________
Clientapps-cvs mailing list
Clientapps-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/clientapps-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic