Sure, here's the parts that I think is of value: Heres how my queue is defined:
class MetadataDownloader @@queue = Dispatch::Queue.new("se.kennylovrin.test") class << self def fetch(id) downloader = new(id) @@queue.async do downloader.start end end end <more code here.....> end I use this by looping an array of integers, calling MetadataDownloader.fetch(var), hoping it will instantiate a new downloader and start it in the queue. :) Then, it does some work, connecting to some API's and downloading som data which contains a url to an image, that url is later passed into this instance method: def save_poster(url) stamp = Time.now.to_i save_path = File.join CoreDataManager.instance.app_support_dir, "posters", "#{stamp}.jpg" save_path_small = File.join CoreDataManager.instance.app_support_dir, "posters", "#{stamp}_small.jpg" fm = NSFileManager.defaultManager unless fm.fileExistsAtPath save_path error = Pointer.new_with_type "@" unless fm.createDirectoryAtPath save_path.stringByDeletingLastPathComponent, withIntermediateDirectories:true, attributes:nil, error:error NSLog "Failed to create dir for poster" return nil end img_data = NSData.dataWithContentsOfURL NSURL.URLWithString(url) if img_data && fm.createFileAtPath(save_path, contents:img_data, attributes:nil) NSLog "Fullsize poster saved" jpeg_data = rescaled_image img_data unless jpeg_data && jpeg_data.writeToFile(save_path_small, atomically:true) NSLog "Failed to scale down poster at #{save_path_small}" return nil end NSLog "Small poster saved" else NSLog "Failed to save poster at #{save_path}" return nil end img_data = nil end save_path_small end which uses this instance method to do the scaling (this seems to be where the problem is): def rescaled_image(img_data) NSLog "Rescaling poster" NSLog "Calculating dimensions" img = CIImage.imageWithData img_data y_scale = 300 / img.extent.size.height x_scale = 200 / img.extent.size.width scale = [y_scale, x_scale].min NSLog "Setting up filter" scale_filter = CIFilter.filterWithName "CILanczosScaleTransform" scale_filter.setValue(NSNumber.numberWithFloat(scale), forKey:"inputScale") scale_filter.setValue(NSNumber.numberWithFloat(1.0), forKey:"inputAspectRatio") scale_filter.setValue(img, forKey:"inputImage") NSLog "Getting scaled image from filter" img = scale_filter.valueForKey "outputImage" NSLog "Create bitmap rep from image" rep = NSBitmapImageRep.alloc.initWithCIImage img NSLog "#{rep}" options = NSMutableDictionary.dictionaryWithObject NSNumber.numberWithFloat(0.85), forKey:NSImageCompressionFactor options.setValue(NSNumber.numberWithBool(true), forKey:NSImageProgressive) NSLog "Getting jpeg data from bitmap rep" jpeg_data = rep.representationUsingType NSJPEGFileType, properties:options NSLog "Rescale done, returning data" jpeg_data end As I said, it crashes randomly, but always at the line where it's trying t get the jpeg representation.. I'm pretty new to Cocoa so I there might be something stupod going on here.. ;) Everything works as expected if I do not try to do the image scaling.. I think I am on MacRuby rev. 4407, but there is a risk I have done an update to rev 4407 but never built it.. I think that is what I have installed though. What do I need to do to get a proper crash log? :) Thanks a lot! Kenny On 11 August 2010 22:28, Thibault Martin-Lagardette <thibault...@gmail.com>wrote: > If it's small enough, and if you can, could you probably share the code > with us? It might help us debug de problem. > If you can't, we may need a little more than just that: > - What version of MacRuby are you running? > - Can you attach a crashlog? > > The more info, the better :-) > > -- > Thibault Martin-Lagardette > > > > On Aug 11, 2010, at 12:55, Kenny Lovrin wrote: > > > Hey guys > > > > I have a piece of code that runs in a background thread, and it crashes > randomly. I can't see any structure to the crashing, other than it always > seem to crash at the following line: > > > > jpeg_data = rep.representationUsingType NSJPEGFileType, > properties:options > > > > Are there any known issues with this and macruby, or am I wrong somewhere > else? I tried running it both on the main thread and also by using sync > instead of async when i dispatch the thread to the queue, but it still > crashes randomly. > > > > I'm not entierly sure how to debug this, all I get in the log is an > EXC_BAD_ACCESS and then it stops in my editor at objc_msgSend. > > Any ideas? :) > > > > PS. I need to rescale an image, if anyone know any other way that works > in a background thread please share. :) > > > > Thanks! > > Kenny > > _______________________________________________ > > MacRuby-devel mailing list > > MacRuby-devel@lists.macosforge.org > > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel > > _______________________________________________ > MacRuby-devel mailing list > MacRuby-devel@lists.macosforge.org > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel >
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel