Hey Guys, '' I am developing a rails application for a client. Suffice it to say I have to do some long running tasks so of course I used my favorite plugin backgroundrb. Unfortunately I have a problem. I recently put some new work into a background task that requires the use of ruburple (a gem for connecting to IM protocols). Since then, I noticed that the worker that uses it sometimes just stops running with no explanation. I checked the logs and I assume the relevant code is below: libnm_glib_nm_state_cb: dbus returned an error. (org.freedesktop.DBus.Error.ServiceUnknown) The name org.freedesktop.NetworkManager was not provided by any .service files ** (process:13909): CRITICAL **: xmlnode_set_attrib: assertion `value !NULL'' failed ** (process:13909): CRITICAL **: xmlnode_set_attrib: assertion `value !NULL'' failed ** (process:13909): CRITICAL **: xmlnode_set_attrib: assertion `value !NULL'' failed #{my_rails_app}/releases/.../vendor/plugins/backgroundrb/framework/core.rb:149: [BUG] Segmentation fault ruby 1.8.6 (2007-06-07) [i486-linux] My question is two-fold: 1) what''s the best way to go about fixing this? How can I get more detailed information regarding the problem here. I assume the combination of the CRITICAL and the always fun segmentation fault is killing the thread. How can I find and eliminate the problem or implement exception handling so it ignores the issue. 2) How can I just force the thread back up if it dies. There has to be a way to have backgroundrb recreate the thread if it dies, right? I mean sure, that segmentation fault shouldn''t happen but if it does, I need a way to bring the thread back online. So if you could help with that I would appreciate it. I know ezra pokes around here every once in a while. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
BTW the app is running on ruby 1.8.6 (2007-06-07) [i486-linux] rails 2.0.1 ubuntu 7.10 gems are updated and the weird part is that the "segmentation fault" doesn''t happen every time. Most of the time it works just fine. However 1/5 times the fault will occur and the thread dies. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
BTW, the line that it references for the segmentation fault: backgroundrb/framework/core.rb:149 # method starts event loop in the process def start_reactor Signal.trap("TERM") { terminate_me } Signal.trap("INT") { shutdown } loop do check_for_timer_events user_thread_window #=> let user level threads run for a while ready_fds = select(@read_ios,@write_ios,nil,0.005) # HERE IT FAILS!!! #next if ready_fds.blank? next if !ready_fds or ready_fds.empty? ready_fds = ready_fds.flatten.compact ready_fds.each do |t_sock| if t_sock.is_a? UNIXSocket handle_internal_messages(t_sock) else handle_external_messages(t_sock) end end end end -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Fri, Jan 25, 2008 at 5:18 PM, Nathan Esquenazi <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > BTW, the line that it references for the segmentation fault: > > > backgroundrb/framework/core.rb:149 > > > # method starts event loop in the process > def start_reactor > Signal.trap("TERM") { terminate_me } > Signal.trap("INT") { shutdown } > loop do > check_for_timer_events > user_thread_window #=> let user level threads run for a while > ready_fds = select(@read_ios,@write_ios,nil,0.005) # HERE IT > FAILS!!! > #next if ready_fds.blank? > > next if !ready_fds or ready_fds.empty? > > ready_fds = ready_fds.flatten.compact > ready_fds.each do |t_sock| > if t_sock.is_a? UNIXSocket > handle_internal_messages(t_sock) > else > handle_external_messages(t_sock) > end > end > end > end > >By any chance, can you run this thing with gdb? Also segmentation fault is one error from which process itself can''t recover and must be restarted from outside. You can have a monit script for that. -- Let them talk of their oriental summer climes of everlasting conservatories; give me the privilege of making my own summer with my own coals. http://gnufied.org --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---