PollingInstallWlanFirmWare関数をスレッドセーフに修正。

(マリクラバグNo.660の原因と思われる箇所の修正。)

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2768 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2009-03-26 00:40:35 +00:00
parent a938401b08
commit 6fc7987341

View File

@ -668,8 +668,8 @@ BOOL PollingInstallWlanFirmware( void )
if( GetWlanFirmwareInstallResult( &result ) ) { if( GetWlanFirmwareInstallResult( &result ) ) {
if( result == WLANFIRM_RESULT_SUCCESS ) { if( result == WLANFIRM_RESULT_SUCCESS ) {
OS_TPrintf( "WLFIRM load finished.\n" ); OS_TPrintf( "WLFIRM load finished.\n" );
s_isFinished = TRUE; // <20>³<EFBFBD>í<EFBFBD>I—¹
s_result = result; s_result = result;
s_isFinished = TRUE; // 正常終了
}else { }else {
// ロード失敗 // ロード失敗
if( !s_isHotStartWLFirm ) { if( !s_isHotStartWLFirm ) {
@ -680,8 +680,13 @@ BOOL PollingInstallWlanFirmware( void )
#ifdef SDK_RELEASE #ifdef SDK_RELEASE
PMi_SetWirelessLED( PM_WIRELESS_LED_OFF ); PMi_SetWirelessLED( PM_WIRELESS_LED_OFF );
#endif #endif
s_isFinished = TRUE; // ここがスレッドセーフでなかったため、s_isFinishedがTRUEになってから、s_isFinishedがTRUEになってから、s_resultがセットされる間に
// スレッドスイッチが発生して、他スレッドからPollingInstallWlanFirmware+GetWlanFirmwareInstallFinalResultをリードすると、
// 前回のs_resultの値が取得されてしまっていた。
// ここで、DSアプリからのHWリセット時は、HotStartに失敗してからColdスタートになるので、s_resultに一時的にFAILが入るが、
// このタイミングで上記状態になると、ファームロードは成功しているのに失敗判定されてしまうことになる。
s_result = result; s_result = result;
s_isFinished = TRUE;
}else { }else {
// そうでない場合は、ColdStartロードで再度実行。 // そうでない場合は、ColdStartロードで再度実行。
(void)InstallWlanFirmware( FALSE ); (void)InstallWlanFirmware( FALSE );