diff options
| author | 2015-04-01 21:57:10 -0400 | |
|---|---|---|
| committer | 2015-04-01 21:57:10 -0400 | |
| commit | 140163dcc77594b41da64c677883fd7d7ea13e0d (patch) | |
| tree | 97c4d2416d86feb7837a603bb5de63d0bbdbd468 /src/osd/modules/netdev | |
| parent | 793271786eb0302711bf4e81573300ded0373dc1 (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.c | 16 |
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; |
