summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/netdev
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2015-04-01 21:57:10 -0400
committer arbee <rb6502@users.noreply.github.com>2015-04-01 21:57:10 -0400
commit140163dcc77594b41da64c677883fd7d7ea13e0d (patch)
tree97c4d2416d86feb7837a603bb5de63d0bbdbd468 /src/osd/modules/netdev
parent793271786eb0302711bf4e81573300ded0373dc1 (diff)
netdev: fix race condition/crash when using the OSD to choose pcap devices. [Rob Braun]
Diffstat (limited to 'src/osd/modules/netdev')
-rw-r--r--src/osd/modules/netdev/pcap.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/osd/modules/netdev/pcap.c b/src/osd/modules/netdev/pcap.c
index 29e642490bb..3e48aebb057 100644
--- a/src/osd/modules/netdev/pcap.c
+++ b/src/osd/modules/netdev/pcap.c
@@ -189,7 +189,14 @@ void netdev_pcap::set_mac(const char *mac)
int netdev_pcap::send(UINT8 *buf, int len)
{
- if(!m_p) return 0;
+ int ret;
+ if(!m_p) {
+ printf("send invoked, but no pcap context\n");
+ return 0;
+ }
+ ret = pcap_sendpacket_dl(m_p, buf, len);
+ printf("sent packet length %d, returned %d\n", len, ret);
+ return ret ? len : 0;
return (!pcap_sendpacket_dl(m_p, buf, len))?len:0;
}
@@ -219,6 +226,7 @@ int netdev_pcap::recv_dev(UINT8 **buf)
netdev_pcap::~netdev_pcap()
{
if(m_p) pcap_close_dl(m_p);
+ m_p = NULL;
}
static CREATE_NETDEV(create_pcap)
@@ -279,7 +287,11 @@ int pcap_module::init()
while(devs)
{
- add_netdev(devs->name, devs->description, create_pcap);
+ if(devs->description) {
+ add_netdev(devs->name, devs->description, create_pcap);
+ } else {
+ add_netdev(devs->name, devs->name, create_pcap);
+ }
devs = devs->next;
}
return 0;