From c041daf1f2f8facd0bec453588a0c02464ccd59c Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Wed, 16 Jul 2014 04:21:54 +0000 Subject: Fix #1777: Problem in audio device list refresh after unregistering an audio device factory. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4879 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia-audiodev/audiodev.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pjmedia/src/pjmedia-audiodev/audiodev.c b/pjmedia/src/pjmedia-audiodev/audiodev.c index 4ccce9f8..f747373e 100644 --- a/pjmedia/src/pjmedia-audiodev/audiodev.c +++ b/pjmedia/src/pjmedia-audiodev/audiodev.c @@ -275,7 +275,7 @@ static pj_status_t init_driver(unsigned drv_idx, pj_bool_t refresh) unsigned i, dev_cnt; pj_status_t status; - if (!refresh) { + if (!refresh && drv->create) { /* Create the factory */ f = (*drv->create)(aud_subsys.pf); if (!f) @@ -291,6 +291,9 @@ static pj_status_t init_driver(unsigned drv_idx, pj_bool_t refresh) f = drv->f; } + if (!f) + return PJ_EUNKNOWN; + /* Get number of devices */ dev_cnt = f->op->get_dev_count(f); if (dev_cnt + aud_subsys.dev_cnt > MAX_DEVS) { @@ -311,7 +314,8 @@ static pj_status_t init_driver(unsigned drv_idx, pj_bool_t refresh) */ /* Fill in default devices */ - drv->play_dev_idx = drv->rec_dev_idx = drv->dev_idx = -1; + drv->play_dev_idx = drv->rec_dev_idx = + drv->dev_idx = PJMEDIA_AUD_INVALID_DEV; for (i=0; if = NULL; } - drv->dev_cnt = 0; - drv->play_dev_idx = drv->rec_dev_idx = drv->dev_idx = -1; + pj_bzero(drv, sizeof(*drv)); + drv->play_dev_idx = drv->rec_dev_idx = + drv->dev_idx = PJMEDIA_AUD_INVALID_DEV; } /* API: Initialize the audio subsystem. */ @@ -491,7 +496,6 @@ pjmedia_aud_unregister_factory(pjmedia_aud_dev_factory_create_func_ptr adf) } deinit_driver(i); - pj_bzero(drv, sizeof(*drv)); return PJ_SUCCESS; } } -- cgit v1.2.3