diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2016-05-26 23:51:32 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2016-05-26 23:51:32 +0200 |
| commit | 7d3c7a345f05adbc9ca26d8ca7f6c7fffa5096be (patch) | |
| tree | 9c4d3dcf1b24de664c1bf87d391e38e43c5e798b /src/lib/openjp2/dwt.c | |
| parent | 69497d35c0e35a1f9b789d016e9eb4946b8f0fab (diff) | |
Be robust to failed allocations of job structures
Diffstat (limited to 'src/lib/openjp2/dwt.c')
| -rw-r--r-- | src/lib/openjp2/dwt.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/lib/openjp2/dwt.c b/src/lib/openjp2/dwt.c index e21cc16f..18f8d9c3 100644 --- a/src/lib/openjp2/dwt.c +++ b/src/lib/openjp2/dwt.c @@ -679,6 +679,16 @@ static OPJ_BOOL opj_dwt_decode_tile(opj_thread_pool_t* tp, opj_tcd_tilecomp_t* t opj_dwd_decode_h_job_t* job; job = (opj_dwd_decode_h_job_t*) opj_malloc(sizeof(opj_dwd_decode_h_job_t)); + if( !job ) + { + /* It would be nice to fallback to single thread case, but */ + /* unfortunately some jobs may be launched and have modified */ + /* tiledp, so it is not practical to recover from that error */ + /* FIXME event manager error callback */ + opj_thread_pool_wait_completion(tp, 0); + opj_aligned_free(h.mem); + return OPJ_FALSE; + } job->h = h; job->dwt_1D = dwt_1D; job->rw = rw; @@ -726,6 +736,16 @@ static OPJ_BOOL opj_dwt_decode_tile(opj_thread_pool_t* tp, opj_tcd_tilecomp_t* t opj_dwd_decode_v_job_t* job; job = (opj_dwd_decode_v_job_t*) opj_malloc(sizeof(opj_dwd_decode_v_job_t)); + if( !job ) + { + /* It would be nice to fallback to single thread case, but */ + /* unfortunately some jobs may be launched and have modified */ + /* tiledp, so it is not practical to recover from that error */ + /* FIXME event manager error callback */ + opj_thread_pool_wait_completion(tp, 0); + opj_aligned_free(v.mem); + return OPJ_FALSE; + } job->v = v; job->dwt_1D = dwt_1D; job->rh = rh; |
