tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher Schultz <ch...@christopherschultz.net>
Subject Re: JNI problem
Date Thu, 08 Oct 2009 23:24:40 GMT
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Mohamedin,

On 10/8/2009 5:42 AM, Mohamedin wrote:
> I have fixed this bug (Long time without coding in C). But still the
> error.

You didn't look for all uses of "sizeof":

> while((bytes = read(inF, buff, sizeof(buff))) > 0)

I think you meant this:

while((bytes = read(inF, buff, 1024)) > 0)  // use any window size

Also, as Konstantin points out, you have a "free" in there somewhere, so
you ought to have a "malloc", too. The API documentation for
MagickGetException does not seem to indicate that the returned object
needs to be freed.

It looks like you have memory leaks everywhere. For instance:

> int resize(const char * srcFile, const char * dstFile, int width, int
> height, int quality){
> 
> char *description;
> ExceptionType severity;
> MagickWand *magick_wand;
> unsigned int status;
> 
> magick_wand = NewMagickWand();
> 
> status = MagickReadImage(magick_wand, srcFile);
> 
> if (status == False) {
> 
> ThrowAPIException(magick_wand);
> 
> return False;
> }

What about the magick_wand variable? Shouldn't you free that guy?

> MagickResizeImage(magick_wand,width,height,LanczosFilter,1.0);
> 
> MagickSetCompressionQuality(magick_wand, quality);
> 
> status=MagickWriteImages(magick_wand, dstFile,True);
> 
> if (status == False){
> 
> ThrowAPIException(magick_wand);
> 
> return False;
> }

What about freeing the memory allocated by MagickReadImage, here? You
ought to call this method before every 'return' from your function:

> DestroyMagickWand(magick_wand);

I would highly recommend that you have some with some more C experience
read-through your code. It's clear that your code is untrustworthy when
it comes to memory being managed by the JVM, and you can really ruin the
JVM's day, as you have seen.

> int resize_with_limits(const char * srcFile, const char * dstFile, int
> maxDim, int maxSize){

This function has the same problems as above.

> int crop(const char * srcFile, const char * dstFile, int widthRatio, int
> heightRatio){

Same here.

> int compose(const char * composeImgFile, const char * imageFile, int
> position, int width, int height, int shiftDirection, int shiftAmount){

Guess what? This one is correct!

> status = MagickReadImage(composite_wand, composeImgFile);
> 
> if (status == False) {
> 
> ThrowAPIException(composite_wand);
> 
> DestroyMagickWand(magick_wand);
> 
> return False;
> 
> }

The above code is the way to do things.

- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkrOdLcACgkQ9CaO5/Lv0PD3tgCgjmH9/+G+9FIyhwJiApknBWQ2
wbgAnjmuh9Fb8xuAMIsQAUNU9Xm40HYz
=dbmW
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message