mirror of
https://github.com/holub/mame
synced 2025-07-02 00:29:37 +03:00
chdman: fixed hang when chd_file_compressor::async_read() failed (e.g. trying to read an .avi with unsupported color depth) / improved error reporting a bit (nw)
This commit is contained in:
parent
158bd9f20e
commit
ac76a12974
@ -2422,13 +2422,13 @@ void chd_file_compressor::compress_begin()
|
|||||||
|
|
||||||
chd_error chd_file_compressor::compress_continue(double &progress, double &ratio)
|
chd_error chd_file_compressor::compress_continue(double &progress, double &ratio)
|
||||||
{
|
{
|
||||||
|
// if we got an error, return an error
|
||||||
|
if (m_read_error)
|
||||||
|
return CHDERR_READ_ERROR;
|
||||||
|
|
||||||
// if done reading, queue some more
|
// if done reading, queue some more
|
||||||
while (m_read_queue_offset < m_logicalbytes && osd_work_queue_items(m_read_queue) < 2)
|
while (m_read_queue_offset < m_logicalbytes && osd_work_queue_items(m_read_queue) < 2)
|
||||||
{
|
{
|
||||||
// if we got an error, return an error
|
|
||||||
if (m_read_error)
|
|
||||||
return CHDERR_READ_ERROR;
|
|
||||||
|
|
||||||
// see if we have enough free work items to read the next half of a buffer
|
// see if we have enough free work items to read the next half of a buffer
|
||||||
UINT32 startitem = m_read_queue_offset / hunk_bytes();
|
UINT32 startitem = m_read_queue_offset / hunk_bytes();
|
||||||
UINT32 enditem = startitem + WORK_BUFFER_HUNKS / 2;
|
UINT32 enditem = startitem + WORK_BUFFER_HUNKS / 2;
|
||||||
@ -2690,8 +2690,9 @@ void chd_file_compressor::async_read()
|
|||||||
// advance the read pointer
|
// advance the read pointer
|
||||||
m_read_done_offset += numbytes;
|
m_read_done_offset += numbytes;
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (std::exception& ex)
|
||||||
{
|
{
|
||||||
|
fprintf(stderr, "exception occured: %s\n", ex.what());
|
||||||
m_read_error = true;
|
m_read_error = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2888,14 +2888,9 @@ int CLIB_DECL main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
return err.error();
|
return err.error();
|
||||||
}
|
}
|
||||||
catch (std::bad_alloc &)
|
catch (std::exception& ex)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Out of memory\n");
|
fprintf(stderr, "Unhandled exception: %s\n", ex.what());
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Unhandled exception\n");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user