From: "sean.swolfe@..." Date: 2006-02-02T06:48:12+09:00 Subject: "[BUG] Segmentation fault" on import script. Hi gang. Sorry I haven't been able to respond to my last post about Stop Word dictionaries. Been all too busy, but the posted info was very useful. Anyways, I have a bit of a situation. I have a collection of files, around 10,000, that I need to parse and then suck that data into a database, along with their linked images. I've had a script that has been working pretty much for over 99.5% of the articles. Both the article data, and the images were getting imported fine. The images also have to go through a few processing steps before being put into the database. They are resized to meet a certain constraint, of a new document format, and are also resized again a few more times to create 2 sizes of Thumbnails. I've been using the RMagick library to do the image resizing. I then had to make a change, because I realized that I wasn't accommodating Animated GIF's and the resulting images that were saved only contained the first frame. So now I added just a routine around the resizing to iterate through an ImageList and do all the resizing for each frame. Now with this change I get a "[BUG] Segmentation fault" error. I thought maybe I was starving the memory resources and the GC couldn't keep up. (I'm uncomfortably unfamiliar with how the Ruby GC works as opposed to Java or .NET GC), so I explicitly call garbage_collect after about 100 imports. Still get the same error. This happens in both Ruby 1.8.2 and 1.8.4 on Mac OSX as well as Linux. Also, if it possibly means anything, this script is run in a Rails environment using the runner script. It will run successfully for about 4000 articles before it bombs out. Here is an excerpt of the possibly offensive code: # image_object is an ActiveRecord object created # a little before this code. # get the ImageList from the image file. image_file_list = Magick::ImageList.new(@old_site_path + image_path) # create ImageLists for the thumbnails copied from the original ImageList smaller_list = image_file_list.copy smallest_list = image_file_list.copy tiniest_list = image_file_list.copy # loop thorugh the images in the list for image_index in 0...image_file_list.length image_file = image_file_list[image_index] # resize the loaded image to the main constraints image_file.change_geometry!('150x150') do |cols, rows, img| img.resize!(cols, rows) image_object.original_x = cols image_object.original_y = rows end smaller_list[image_index] = image_file.change_geometry('110x110') do |cols, rows, img| image_object.thumb_x = cols image_object.thumb_y = rows img.resize(cols, rows) end smallest_list[image_index] = image_file.change_geometry('91x91') do |cols, rows, img| image_object.small_thumb_x = cols image_object.small_thumb_y = rows img.resize(cols, rows) end tiniest_list[image_index] = image_file.change_geometry('50x50') do |cols, rows, img| image_object.tiny_thumb_x = cols image_object.tiny_thumb_y = rows img.resize(cols, rows) end end image_object.original_filename = File.basename(image_path) image_object.title = "#{ review_data[:artist] }: #{ review_data[:title] }" image_object.image_data = image_file_list.to_blob image_object.tiny_thumb = tiniest_list.to_blob # <-- segement fault usually happens here. image_object.big_thumb = smaller_list.to_blob image_object.small_thumb = smallest_list.to_blob Thanks in advance....