Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Sean_V_2
Beginner
86 Views

[FIXED in v7.1] Delete JPEG decoder crashes in Debug mode

Hello there,

We've been using Intel IPP since version 6.0 and since then we've been noticing problems with UIC libs. We use all the UIC codecs in our application and we found out that deleting the jpeg object in Debug mode causes the application to crash. In Release mode it works with no problems. We initialize  UIC::BaseImageDecoder* dec = NULL; and then depending on the file type we construct appropriate decoder with dec = new JPEGDecoder() (or others).

After we finish working with it, we tried calling dec->Close() and then deleting dec, but it crashed with no stack trace on delete dec. Any help is welcome.

This is all happening with dynamically linked UIC libs version 7.0.7.

Thanks a lot.

0 Kudos
11 Replies
SergeyKostrov
Valued Contributor II
86 Views

Let's consider a pseudo-code: ... class JPEGDecoder { public: JPEGDecoder() { ... }; ~JPEGDecoder() <= set a break point here { ... }; ... }; ... void main( void ) { JPEGDecoder *dec = new JPEGDecoder(); ... if( dec != NULL ) { dec->Close(); delete dec; // Here it crashes, right? } ... } When you're debugging try to step into delete C++ operator or set a break point in JPEGDecoder::~JPEGDecoder destructor in order to see what is going on there. I could assume that some resource is de-allocated twice.
manca1
Beginner
86 Views

Hello,

I can't stop in source of JPEGDecoder because I am using prebuilt libraries and UIC dlls. Can you try to reproduce the bug yourself?

Thanks.

manca1
Beginner
86 Views

Anyone?

Sergey_K_Intel
Employee
86 Views

Hi,

Do not use Close() here. ~JPEGDecoder calls Close() itself and there is double "delete m_jpeg".
This is fixed in 7.1.

Regards,
Sergey 

SergeyKostrov
Valued Contributor II
86 Views

>>...Do not use Close() here. ~JPEGDecoder calls Close() itself and there is double "delete m_jpeg". This is fixed in 7.1. Thanks for the confirmation that some issues are fixed.
manca1
Beginner
86 Views

Even without Close(), it still crashes.

SergeyKostrov
Valued Contributor II
86 Views

>>...Even without Close(), it still crashes... Please take a look. This is your statement: >>...This is all happening with dynamically linked UIC libs version 7.0.7... This is Sergey Khlystov (Intel) statement: >>...This is fixed in 7.1... So, my question is did you upgrade the IPP library to version 7.1?
manca1
Beginner
86 Views

This is what you said:

"Do not use Close() here. ~JPEGDecoder calls Close() itself and there is double "delete m_jpeg". 
This is fixed in 7.1."

I understood that Close() calls delete m_jpeg and then since destructor calls Close() again it deletes already deleted pointer. Now, I tried removing Close() and leaving destructor calls it and the application still crashes. Did you mean to say that destructor calls delete m_jpeg as well as Close(). Meaning you had a big bug in your code. I'll try 7.1 and see if it works.

Thanks.

SergeyKostrov
Valued Contributor II
86 Views

>>... I'll try 7.1 and see if it works. Please try it. Here is a generic explanation of why it happens: [ A version with a Bug ] ... JPEGDecoder::~JPEGDecoder() { Close(); }; JPEGDecoder::Close() { DeallocateResource( pSomePointer ); }; ... [ A Correct version ] ... JPEGDecoder::~JPEGDecoder() { Close(); }; JPEGDecoder::Close() { if( pSomePointer != NULL ) { DeallocateResource( m_pSomePointer ); m_pSomePointer = NULL; } }; ... Note: In that case a "double" deallocation of some resource in m_pSomePointer simply impossible and such errors / bugs are very common.
manca1
Beginner
86 Views

Works with IPP 7.1. Thank you.

SergeyKostrov
Valued Contributor II
86 Views

>>Works with IPP 7.1. Thank you. Thanks for the confirmation. You could also chage the title of the thread to [ FIXED in v7.1 ] Delete JPEG decoder crashes in Debug mode.
Reply