Skip to content

Commit 57f2921

Browse files
committed
Stop sharing sockets!
1 parent d0d0191 commit 57f2921

4 files changed

Lines changed: 27 additions & 5 deletions

File tree

gc/bte/bte.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ void BTE_WriteStoredLinkKey(struct bd_addr *bdaddr,u8 *key);
164164
void BTE_ClearStoredLinkKeys(void);
165165

166166
struct bte_pcb* bte_new(void);
167+
void bte_free(struct bte_pcb *pcb);
167168
void bte_arg(struct bte_pcb *pcb,void *arg);
168169
void bte_received(struct bte_pcb *pcb, s32 (*recv)(void *arg,void *buffer,u16 len));
169170
void bte_disconnected(struct bte_pcb *pcb,s32 (disconn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));

lwbt/bte.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,14 @@ struct bte_pcb* bte_new(void)
645645
return pcb;
646646
}
647647

648+
void bte_free(struct bte_pcb *pcb)
649+
{
650+
if(pcb==NULL) return;
651+
652+
LWP_CloseQueue(pcb->cmdq);
653+
btmemb_free(&bte_pcbs, pcb);
654+
}
655+
648656
s32 bte_registerdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err))
649657
{
650658
u32 level;

wiiuse/io_wii.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ static s32 __wiiuse_disconnected(void *arg,struct bte_pcb *pcb,u8 err)
5353

5454
if(wm->event_cb) wm->event_cb(wm,WIIUSE_DISCONNECT);
5555

56+
bte_free(wml->sock);
57+
wml->sock = NULL;
58+
5659
wml->wm = NULL;
5760
return ERR_OK;
5861
}
@@ -134,7 +137,11 @@ int wiiuse_register(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, struct
134137
wml->sock = bte_new();
135138
}
136139
else
140+
{
137141
printf("err: %d / state: %d / bdaddr: %02x:%02x:%02x:%02x:%02x:%02x\n", wml->sock->err, wml->sock->state, wml->sock->bdaddr.addr[5], wml->sock->bdaddr.addr[4], wml->sock->bdaddr.addr[3], wml->sock->bdaddr.addr[2], wml->sock->bdaddr.addr[1], wml->sock->bdaddr.addr[0]);
142+
bte_free(wml->sock);
143+
wml->sock = bte_new();
144+
}
138145

139146
bte_arg(wml->sock,wml);
140147
bte_received(wml->sock,__wiiuse_receive);

wiiuse/wpad.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -958,7 +958,8 @@ static s8 __wpad_connreqCB(void *arg,struct bd_addr *pad_addr,u8 *cod,u8 link_ty
958958
// Only accept connection requests (i.e. "press any button") if not doing guest pairing
959959
if(BTE_GetPairMode() == PAIR_MODE_NORMAL) {
960960
if(!bd_addr_cmp(pad_addr,BD_ADDR_ANY)) {
961-
__lwp_thread_dispatchdisable();
961+
_CPU_ISR_Disable(level);
962+
//__lwp_thread_dispatchdisable();
962963
for(i=0; i<CONF_PAD_MAX_ACTIVE; i++) {
963964
BD_ADDR_FROM_BYTES(&bdaddr,__wpad_devs.active[i].bdaddr);
964965
if(bd_addr_cmp(pad_addr,&bdaddr)) {
@@ -1003,13 +1004,16 @@ static s8 __wpad_connreqCB(void *arg,struct bd_addr *pad_addr,u8 *cod,u8 link_ty
10031004

10041005
if(slot < CONF_PAD_MAX_ACTIVE) {
10051006
__wpads_used |= (0x01<<slot);
1007+
printf("Assigning slot %d\n",slot);
10061008
wiiuse_register(&__wpads_listen[slot],pad_addr,__wpad_assign_slot);
1007-
__lwp_thread_dispatchunnest();
1009+
_CPU_ISR_Restore(level);
1010+
//__lwp_thread_dispatchunnest();
10081011
return ERR_OK;
10091012
}
10101013
else
10111014
{
1012-
__lwp_thread_dispatchunnest();
1015+
_CPU_ISR_Restore(level);
1016+
//__lwp_thread_dispatchunnest();
10131017
}
10141018
}
10151019

@@ -1702,16 +1706,18 @@ s32 WPAD_Shutdown(void)
17021706
for(i=0;i<WPAD_MAX_DEVICES;i++) {
17031707
wpdcb = &__wpdcb[i];
17041708
SYS_RemoveAlarm(wpdcb->sound_alarm);
1709+
bte_free(__wpads_listen[i].sock);
1710+
__wpads_listen[i].sock = NULL;
17051711
//__wpad_disconnect(wpdcb);
17061712
}
17071713

17081714
__wiiuse_sensorbar_enable(0);
17091715
_CPU_ISR_Restore(level);
17101716

1711-
while(__wpads_used) {
1717+
/*while(__wpads_used) {
17121718
usleep(50);
17131719
if(++cnt > 3000) break;
1714-
}
1720+
}*/
17151721

17161722
BTE_Shutdown();
17171723

0 commit comments

Comments
 (0)