From 6fc7987341151940ae2aba53c97be014523298ad Mon Sep 17 00:00:00 2001 From: yosiokat Date: Thu, 26 Mar 2009 00:40:35 +0000 Subject: [PATCH] =?UTF-8?q?PollingInstallWlanFirmWare=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=82=92=E3=82=B9=E3=83=AC=E3=83=83=E3=83=89=E3=82=BB=E3=83=BC?= =?UTF-8?q?=E3=83=95=E3=81=AB=E4=BF=AE=E6=AD=A3=E3=80=82=20=EF=BC=88?= =?UTF-8?q?=E3=83=9E=E3=83=AA=E3=82=AF=E3=83=A9=E3=83=90=E3=82=B0No.660?= =?UTF-8?q?=E3=81=AE=E5=8E=9F=E5=9B=A0=E3=81=A8=E6=80=9D=E3=82=8F=E3=82=8C?= =?UTF-8?q?=E3=82=8B=E7=AE=87=E6=89=80=E3=81=AE=E4=BF=AE=E6=AD=A3=E3=80=82?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2768 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c b/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c index bb77e5c9..0d7906c4 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c @@ -668,8 +668,8 @@ BOOL PollingInstallWlanFirmware( void ) if( GetWlanFirmwareInstallResult( &result ) ) { if( result == WLANFIRM_RESULT_SUCCESS ) { OS_TPrintf( "WLFIRM load finished.\n" ); - s_isFinished = TRUE; // 正常終了 s_result = result; + s_isFinished = TRUE; // 正常終了 }else { // ロード失敗 if( !s_isHotStartWLFirm ) { @@ -680,8 +680,13 @@ BOOL PollingInstallWlanFirmware( void ) #ifdef SDK_RELEASE PMi_SetWirelessLED( PM_WIRELESS_LED_OFF ); #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_isFinished = TRUE; }else { // そうでない場合は、ColdStartロードで再度実行。 (void)InstallWlanFirmware( FALSE );