Ignore:
Timestamp:
Jul 17, 2007 4:25:45 PM (17 years ago)
Author:
bennylp
Message:

Ticket #353: memory leak with pjsua WAV file player/recorder

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_media.c

    r1393 r1403  
    11061106 */ 
    11071107 
     1108static char* get_basename(const char *path, unsigned len) 
     1109{ 
     1110    char *p = ((char*)path) + len; 
     1111 
     1112    if (len==0) 
     1113        return p; 
     1114 
     1115    for (--p; p!=path && *p!='/' && *p!='\\'; --p); 
     1116 
     1117    return (p==path) ? p : p+1; 
     1118} 
     1119 
     1120 
    11081121/* 
    11091122 * Create a file player, and automatically connect this player to 
     
    11161129    unsigned slot, file_id; 
    11171130    char path[PJ_MAXPATH]; 
     1131    pj_pool_t *pool; 
    11181132    pjmedia_port *port; 
    11191133    pj_status_t status; 
     
    11381152    pj_memcpy(path, filename->ptr, filename->slen); 
    11391153    path[filename->slen] = '\0'; 
    1140     status = pjmedia_wav_player_port_create(pjsua_var.pool, path, 
     1154 
     1155    pool = pjsua_pool_create(get_basename(path, filename->slen), 1000, 1000); 
     1156    if (!pool) { 
     1157        PJSUA_UNLOCK(); 
     1158        return PJ_ENOMEM; 
     1159    } 
     1160 
     1161    status = pjmedia_wav_player_port_create(pool, path, 
    11411162                                            pjsua_var.mconf_cfg.samples_per_frame * 
    11421163                                              1000 / pjsua_var.media_cfg.clock_rate,  
     
    11451166        PJSUA_UNLOCK(); 
    11461167        pjsua_perror(THIS_FILE, "Unable to open file for playback", status); 
     1168        pj_pool_release(pool); 
    11471169        return status; 
    11481170    } 
     
    11551177        pjsua_perror(THIS_FILE, "Unable to add file to conference bridge",  
    11561178                     status); 
     1179        pj_pool_release(pool); 
    11571180        return status; 
    11581181    } 
    11591182 
    11601183    pjsua_var.player[file_id].type = 0; 
     1184    pjsua_var.player[file_id].pool = pool; 
    11611185    pjsua_var.player[file_id].port = port; 
    11621186    pjsua_var.player[file_id].slot = slot; 
     
    11821206{ 
    11831207    unsigned slot, file_id, ptime; 
     1208    pj_pool_t *pool; 
    11841209    pjmedia_port *port; 
    11851210    pj_status_t status; 
     
    12061231            pjsua_var.media_cfg.clock_rate; 
    12071232 
    1208     status = pjmedia_wav_playlist_create(pjsua_var.pool, label,  
     1233    pool = pjsua_pool_create("playlist", 1000, 1000); 
     1234    if (!pool) { 
     1235        PJSUA_UNLOCK(); 
     1236        return PJ_ENOMEM; 
     1237    } 
     1238 
     1239    status = pjmedia_wav_playlist_create(pool, label,  
    12091240                                         file_names, file_count, 
    12101241                                         ptime, options, 0, &port); 
     
    12121243        PJSUA_UNLOCK(); 
    12131244        pjsua_perror(THIS_FILE, "Unable to create playlist", status); 
    1214         return status; 
    1215     } 
    1216  
    1217     status = pjmedia_conf_add_port(pjsua_var.mconf, pjsua_var.pool,  
     1245        pj_pool_release(pool); 
     1246        return status; 
     1247    } 
     1248 
     1249    status = pjmedia_conf_add_port(pjsua_var.mconf, pool,  
    12181250                                   port, &port->info.name, &slot); 
    12191251    if (status != PJ_SUCCESS) { 
     
    12211253        PJSUA_UNLOCK(); 
    12221254        pjsua_perror(THIS_FILE, "Unable to add port", status); 
     1255        pj_pool_release(pool); 
    12231256        return status; 
    12241257    } 
    12251258 
    12261259    pjsua_var.player[file_id].type = 1; 
     1260    pjsua_var.player[file_id].pool = pool; 
    12271261    pjsua_var.player[file_id].port = port; 
    12281262    pjsua_var.player[file_id].slot = slot; 
     
    12951329        pjsua_var.player[id].port = NULL; 
    12961330        pjsua_var.player[id].slot = 0xFFFF; 
     1331        pj_pool_release(pjsua_var.player[id].pool); 
     1332        pjsua_var.player[id].pool = NULL; 
    12971333        pjsua_var.player_cnt--; 
    12981334    } 
     
    13291365    pj_str_t ext; 
    13301366    int file_format; 
     1367    pj_pool_t *pool; 
    13311368    pjmedia_port *port; 
    13321369    pj_status_t status; 
     
    13761413    path[filename->slen] = '\0'; 
    13771414 
     1415    pool = pjsua_pool_create(get_basename(path, filename->slen), 1000, 1000); 
     1416    if (!pool) { 
     1417        PJSUA_UNLOCK(); 
     1418        return PJ_ENOMEM; 
     1419    } 
     1420 
    13781421    if (file_format == FMT_WAV) { 
    1379         status = pjmedia_wav_writer_port_create(pjsua_var.pool, path,  
     1422        status = pjmedia_wav_writer_port_create(pool, path,  
    13801423                                                pjsua_var.media_cfg.clock_rate,  
    13811424                                                pjsua_var.mconf_cfg.channel_count, 
     
    13921435        PJSUA_UNLOCK(); 
    13931436        pjsua_perror(THIS_FILE, "Unable to open file for recording", status); 
    1394         return status; 
    1395     } 
    1396  
    1397     status = pjmedia_conf_add_port(pjsua_var.mconf, pjsua_var.pool,  
     1437        pj_pool_release(pool); 
     1438        return status; 
     1439    } 
     1440 
     1441    status = pjmedia_conf_add_port(pjsua_var.mconf, pool,  
    13981442                                   port, filename, &slot); 
    13991443    if (status != PJ_SUCCESS) { 
    14001444        pjmedia_port_destroy(port); 
    14011445        PJSUA_UNLOCK(); 
     1446        pj_pool_release(pool); 
    14021447        return status; 
    14031448    } 
     
    14051450    pjsua_var.recorder[file_id].port = port; 
    14061451    pjsua_var.recorder[file_id].slot = slot; 
     1452    pjsua_var.recorder[file_id].pool = pool; 
    14071453 
    14081454    if (p_id) *p_id = file_id; 
     
    14591505        pjsua_var.recorder[id].port = NULL; 
    14601506        pjsua_var.recorder[id].slot = 0xFFFF; 
     1507        pj_pool_release(pjsua_var.recorder[id].pool); 
     1508        pjsua_var.recorder[id].pool = NULL; 
    14611509        pjsua_var.rec_cnt--; 
    14621510    } 
Note: See TracChangeset for help on using the changeset viewer.