Skip to content

Commit

Permalink
Eliminate the malloc/free of the jmpbuf on every invocation of a
Browse files Browse the repository at this point in the history
JPEGReadWriter2Plugin primitive.  The jmpbuf can simply be included
in the error_mgr2 struct.
  • Loading branch information
eliotmiranda committed Apr 14, 2020
1 parent 2a79468 commit e06314b
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 12 deletions.
4 changes: 2 additions & 2 deletions platforms/Cross/plugins/JPEGReadWriter2Plugin/Error.c
Expand Up @@ -5,7 +5,7 @@
struct error_mgr2 {
struct jpeg_error_mgr pub; /* "public" fields */

jmp_buf *setjmp_buffer; /* for return to caller */
jmp_buf setjmp_buffer; /* for return to caller */
};

typedef struct error_mgr2 * error_ptr2;
Expand All @@ -20,5 +20,5 @@ void error_exit (j_common_ptr cinfo)
error_ptr2 myerr = (error_ptr2) cinfo->err;

/* Return control to the setjmp point */
longjmp(*myerr->setjmp_buffer, 1);
longjmp(myerr->setjmp_buffer, 1);
}
Expand Up @@ -3,10 +3,11 @@
#include "jpeglib.h"
#include <setjmp.h>

/* c.f. Error.c */
struct error_mgr2 {
struct jpeg_error_mgr pub; /* "public" fields */

jmp_buf *setjmp_buffer; /* for return to caller */
jmp_buf setjmp_buffer; /* for return to caller */
};

typedef struct error_mgr2* error_ptr2;
Expand Down
Expand Up @@ -54,10 +54,9 @@ primJPEGWriteImageonByteArrayformqualityprogressiveJPEGerrorMgrWriteScanlines(
error_ptr2 pjerr = (error_ptr2)jpegErrorMgr2Struct;

pcinfo->err = jpeg_std_error(&pjerr->pub);
pjerr->setjmp_buffer = (jmp_buf *) malloc(sizeof(jmp_buf));
pjerr->pub.error_exit = error_exit;

if (setjmp(*pjerr->setjmp_buffer)) {
if (setjmp(pjerr->setjmp_buffer)) {
jpeg_destroy_compress(pcinfo);

*destinationSizePtr = 0;
Expand Down Expand Up @@ -134,7 +133,6 @@ primJPEGWriteImageonByteArrayformqualityprogressiveJPEGerrorMgrWriteScanlines(
jpeg_finish_compress(pcinfo);
jpeg_destroy_compress(pcinfo);
}
free(pjerr->setjmp_buffer);
}

void
Expand All @@ -154,10 +152,9 @@ primJPEGReadImagefromByteArrayonFormdoDitheringerrorMgrReadScanlines(

int ok = 1;
pcinfo->err = jpeg_std_error(&pjerr->pub);
pjerr->setjmp_buffer = (jmp_buf *) malloc(sizeof(jmp_buf));
pjerr->pub.error_exit = error_exit;

if (setjmp(*pjerr->setjmp_buffer)) {
if (setjmp(pjerr->setjmp_buffer)) {
jpeg_destroy_decompress(pcinfo);
ok = 0;
}
Expand Down Expand Up @@ -283,7 +280,6 @@ primJPEGReadImagefromByteArrayonFormdoDitheringerrorMgrReadScanlines(
jpeg_finish_decompress(pcinfo);
jpeg_destroy_decompress(pcinfo);
}
free(pjerr->setjmp_buffer);
}

void
Expand All @@ -297,10 +293,9 @@ primJPEGReadHeaderfromByteArraysizeerrorMgrReadHeader(
error_ptr2 pjerr = (error_ptr2)jpegErrorMgr2Struct;

pcinfo->err = jpeg_std_error(&pjerr->pub);
pjerr->setjmp_buffer = (jmp_buf *) malloc(sizeof(jmp_buf));
pjerr->pub.error_exit = error_exit;

if (setjmp(*pjerr->setjmp_buffer)) {
if (setjmp(pjerr->setjmp_buffer)) {
jpeg_destroy_decompress(pcinfo);
sourceSize = 0;
}
Expand All @@ -310,5 +305,4 @@ primJPEGReadHeaderfromByteArraysizeerrorMgrReadHeader(
jpeg_mem_src(pcinfo, source, sourceSize);
jpeg_read_header(pcinfo, TRUE);
}
free(pjerr->setjmp_buffer);
}

0 comments on commit e06314b

Please sign in to comment.