mirror of
https://github.com/dborth/snes9xgx.git
synced 2024-11-30 14:34:22 +01:00
This commit is contained in:
parent
212e716ecb
commit
072c4941aa
@ -177,43 +177,65 @@ static u8 netstack[8192] ATTRIBUTE_ALIGN (32);
|
|||||||
|
|
||||||
static void * netcb (void *arg)
|
static void * netcb (void *arg)
|
||||||
{
|
{
|
||||||
s32 res;
|
s32 res=-1;
|
||||||
int retry;
|
int retry;
|
||||||
int wait;
|
int wait;
|
||||||
|
static bool first=true;
|
||||||
|
|
||||||
while(netHalt != 2)
|
while(netHalt != 2)
|
||||||
{
|
{
|
||||||
retry = 30;
|
retry = 5;
|
||||||
|
|
||||||
while (retry)
|
while (retry>0 && (netHalt != 2))
|
||||||
{
|
{
|
||||||
|
if(!first)
|
||||||
|
{
|
||||||
|
bool reset=false;
|
||||||
|
int i;
|
||||||
|
for(i=0;i<500 && (netHalt != 2);i++) // 10 seconds to try to reset
|
||||||
|
{
|
||||||
|
res = net_get_status();
|
||||||
|
if(res != -EBUSY) // trying to init net so we can't kill the net
|
||||||
|
{
|
||||||
|
net_wc24cleanup(); //kill the net
|
||||||
|
reset=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
usleep(20000);
|
||||||
|
}
|
||||||
|
if(!reset)
|
||||||
|
{
|
||||||
|
retry--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
first=false;
|
||||||
net_deinit();
|
net_deinit();
|
||||||
res = net_init_async(NULL, NULL);
|
res = net_init_async(NULL, NULL);
|
||||||
|
|
||||||
if(res != 0)
|
if(res != 0)
|
||||||
break; // failed
|
{
|
||||||
|
sleep(1);
|
||||||
|
retry--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
res = net_get_status();
|
res = net_get_status();
|
||||||
wait = 500; // only wait 10 sec
|
wait = 400; // only wait 10 sec
|
||||||
while (res == -EBUSY && wait > 0)
|
while (res == -EBUSY && wait > 0 && (netHalt != 2))
|
||||||
{
|
{
|
||||||
usleep(20000);
|
usleep(20000);
|
||||||
res = net_get_status();
|
res = net_get_status();
|
||||||
wait--;
|
wait--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res != -EAGAIN && res != -ETIMEDOUT)
|
if(res==0) break;
|
||||||
break;
|
|
||||||
|
|
||||||
retry--;
|
retry--;
|
||||||
usleep(2000);
|
usleep(2000);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res == 0)
|
if (res == 0)
|
||||||
{
|
{
|
||||||
networkInit = true;
|
|
||||||
|
|
||||||
struct in_addr hostip;
|
struct in_addr hostip;
|
||||||
hostip.s_addr = net_gethostip();
|
hostip.s_addr = net_gethostip();
|
||||||
if (hostip.s_addr)
|
if (hostip.s_addr)
|
||||||
@ -222,7 +244,7 @@ static void * netcb (void *arg)
|
|||||||
networkInit = true;
|
networkInit = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LWP_SuspendThread(networkthread);
|
if(netHalt != 2) LWP_SuspendThread(networkthread);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -305,6 +327,9 @@ bool InitializeNetwork(bool silent)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
retry = ErrorPromptRetry("Unable to initialize network!");
|
retry = ErrorPromptRetry("Unable to initialize network!");
|
||||||
|
|
||||||
|
if(networkInit && net_gethostip() > 0)
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return networkInit;
|
return networkInit;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user