Fix memory leak on error path and proper polling vs async conditions

This commit is contained in:
Mark Pizzolato 2011-11-02 05:45:01 -07:00
parent fd5de0d005
commit cbc14bc010
2 changed files with 4 additions and 3 deletions

View file

@ -450,10 +450,10 @@ MTAB xq_mod[] = {
{ MTAB_XTD | MTAB_VDV, 0, "TYPE", "TYPE={DEQNA|DELQA|DELQA-T}", { MTAB_XTD | MTAB_VDV, 0, "TYPE", "TYPE={DEQNA|DELQA|DELQA-T}",
&xq_set_type, &xq_show_type, NULL }, &xq_set_type, &xq_show_type, NULL },
#ifdef USE_READER_THREAD #ifdef USE_READER_THREAD
{ MTAB_XTD | MTAB_VDV, 0, "POLL", "POLL={DEFAULT|DISABLED|4..2500|DELAY=nnn}", { MTAB_XTD | MTAB_VDV, 0, "POLL", "POLL={DEFAULT|DISABLED|4..2500|DELAY=nnn}",
&xq_set_poll, &xq_show_poll, NULL }, &xq_set_poll, &xq_show_poll, NULL },
#else #else
{ MTAB_XTD | MTAB_VDV, 0, "POLL", "POLL={DEFAULT|DISABLED|4..2500}", { MTAB_XTD | MTAB_VDV, 0, "POLL", "POLL={DEFAULT|DISABLED|4..2500}",
&xq_set_poll, &xq_show_poll, NULL }, &xq_set_poll, &xq_show_poll, NULL },
#endif #endif
{ MTAB_XTD | MTAB_VDV | MTAB_NMO, 0, "SANITY", "SANITY={ON|OFF}", { MTAB_XTD | MTAB_VDV | MTAB_NMO, 0, "SANITY", "SANITY={ON|OFF}",
@ -2584,6 +2584,7 @@ t_stat xq_attach(UNIT* uptr, char* cptr)
if (xq->var->poll == 0) { if (xq->var->poll == 0) {
status = eth_set_async(xq->var->etherface, xq->var->coalesce_latency_ticks); status = eth_set_async(xq->var->etherface, xq->var->coalesce_latency_ticks);
if (status != SCPE_OK) { if (status != SCPE_OK) {
eth_close(xq->var->etherface);
free(tptr); free(tptr);
free(xq->var->etherface); free(xq->var->etherface);
xq->var->etherface = NULL; xq->var->etherface = NULL;

View file

@ -87,7 +87,7 @@ extern int32 int_req[IPL_HLVL];
#define XQ_QUE_MAX 500 /* read queue size in packets */ #define XQ_QUE_MAX 500 /* read queue size in packets */
#define XQ_FILTER_MAX 14 /* number of filters allowed */ #define XQ_FILTER_MAX 14 /* number of filters allowed */
#if defined SIM_ASYNCH_IO #if defined(SIM_ASYNCH_IO) && defined(USE_READER_THREAD)
#define XQ_SERVICE_INTERVAL 0 /* polling interval - No Polling with Asynch I/O */ #define XQ_SERVICE_INTERVAL 0 /* polling interval - No Polling with Asynch I/O */
#else #else
#define XQ_SERVICE_INTERVAL 100 /* polling interval - X per second */ #define XQ_SERVICE_INTERVAL 100 /* polling interval - X per second */