芯方式

使用Image Viewer浏览图片时死机

0
阅读(1104)

[DESCRIPTION]
手机或者T卡中放有多张jpeg图片,然后进入图册点击打开一张图片,按右键连续切换到下张图片,手机就会死机,错
误码:fatal error:0xa01
[SOLUTION]
这是由于mediacache那边有打开文件,没有及时关闭,发生file handle泄漏,file handle耗尽以后触发了
FS 那边的fatal error.
IC可以尝试修改如下:
1. srv_mediacache_create_meta_callback()中
if (callback_result == SRV_IES_OK)
{
ies_ret = srv_ies_job_get_meta(cell_p->ies_meta_job_handle, &cell_p->ies_meta_handle);
//srv_ies_job_cancel(cell_p->ies_meta_job_handle);
//ies_ret = srv_ies_meta_query_data(cell_p->ies_meta_handle, cell_p->ies_meta_buffer, &cell_p-
>ies_meta_buffer_size);
//here we do not query meta data, we will query meta data when put meta
cell_p->ies_meta_job_handle = 0;
MMI_TRACE(TRACE_GROUP_2, TRC_VAPP_SRVMC_META_SET_META_JOB_HANDLE_TO_NULL_FILE_INDEX_D_D, cell_p-
>file_index, __LINE__);
if (ies_ret != SRV_IES_OK)
{
/* even if create meta failed, we still think it is valid image
cell_p->err_code = result;
cell_p->err_group= SRV_MEDIACACHE_ERR_GROUP_APP;
cell_p->state = SRV_MEDIACACHE_CACHE_STATE_DECODE_ERR;
srv_mediacache_check_cb_and_call(cell_p, cell_p->file_index, MMI_TRUE);
*/
cell_p->is_ies_meta_saved = MMI_TRUE; //here means wo do not save this meta do db
cell_p->ies_meta_state = SRV_MEDIACACHE_META_STATE_FINISHED_BUT_ERROR;
}
else
{
cell_p->ies_meta_state = SRV_MEDIACACHE_META_STATE_FINISHED;
//TODO :: the code is not right, need modify.
if (g_mediacache_cntx_p->is_meta_using_db)
{
if (g_mediacache_cntx_p->is_put_meta_urgent)
{
srv_mediacache_db_put_meta(cell_p, srv_mediacache_meta_save_to_db_callback, cell_p);
}
}
}
}

if (callback_result == SRV_IES_OK)
{
ies_ret = srv_ies_job_get_meta(cell_p->ies_meta_job_handle, &cell_p->ies_meta_handle);
//srv_ies_job_cancel(cell_p->ies_meta_job_handle);
//ies_ret = srv_ies_meta_query_data(cell_p->ies_meta_handle, cell_p->ies_meta_buffer, &cell_p-
>ies_meta_buffer_size);
//here we do not query meta data, we will query meta data when put meta
cell_p->ies_meta_job_handle = 0;
MMI_TRACE(TRACE_GROUP_2, TRC_VAPP_SRVMC_META_SET_META_JOB_HANDLE_TO_NULL_FILE_INDEX_D_D, cell_p-
>file_index, __LINE__);
if (ies_ret != SRV_IES_OK)
{
/* even if create meta failed, we still think it is valid image
cell_p->err_code = result;
cell_p->err_group= SRV_MEDIACACHE_ERR_GROUP_APP;
cell_p->state = SRV_MEDIACACHE_CACHE_STATE_DECODE_ERR;
srv_mediacache_check_cb_and_call(cell_p, cell_p->file_index, MMI_TRUE);
*/
cell_p->is_ies_meta_saved = MMI_TRUE; //here means wo do not save this meta do db
cell_p->ies_meta_state = SRV_MEDIACACHE_META_STATE_FINISHED_BUT_ERROR;
}
else
{
cell_p->ies_meta_state = SRV_MEDIACACHE_META_STATE_FINISHED;
//TODO :: the code is not right, need modify.
if (g_mediacache_cntx_p->is_meta_using_db)
{
if (g_mediacache_cntx_p->is_put_meta_urgent)
{
srv_mediacache_db_put_meta(cell_p, srv_mediacache_meta_save_to_db_callback, cell_p);
}
else
{
if (cell_p->ies_meta_handle)
{
srv_ies_meta_destroy(cell_p->ies_meta_handle);
cell_p->ies_meta_handle = NULL;
}
}
}
else
{
if (cell_p->ies_meta_handle)
{
srv_ies_meta_destroy(cell_p->ies_meta_handle);
cell_p->ies_meta_handle = NULL;
}
}
}
}
2.srv_mediacache_meta_save_to_db_callback()中
cell_p->is_ies_meta_saved = MMI_TRUE;后面添加
if (cell_p->ies_meta_handle)
{
srv_ies_meta_destroy(cell_p->ies_meta_handle);
cell_p->ies_meta_handle = NULL;
}