Software /
code /
prosody
Changeset
843:1d2dab41b0db
prosody: Protect main loop. Dare I say crashing finally becomes impossible.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 27 Feb 2009 04:35:36 +0000 |
parents | 842:4932f94d35c1 |
children | 844:503ca8da1000 |
files | prosody |
diffstat | 1 files changed, 16 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/prosody Thu Feb 26 22:17:55 2009 +0000 +++ b/prosody Fri Feb 27 04:35:36 2009 +0000 @@ -7,14 +7,14 @@ -- COPYING file in the source package for more information. -- --- Config here -- +-- Will be modified by configure script if run -- CFG_SOURCEDIR=nil; CFG_CONFIGDIR=os.getenv("PROSODY_CFGDIR"); CFG_PLUGINDIR=nil; CFG_DATADIR=os.getenv("PROSODY_DATADIR"); --- -- -- -- -- -- +-- -- -- -- -- -- -- ---- -- -- -- -- -- -- -- -- if CFG_SOURCEDIR then package.path = CFG_SOURCEDIR.."/?.lua;"..package.path @@ -84,7 +84,9 @@ require "core.sessionmanager" require "core.stanza_router" ---[[ +-- Commented to protect us from +-- the second kind of people +--[[ pcall(require, "remdebug.engine"); if remdebug then remdebug.engine.start() end ]] @@ -104,6 +106,7 @@ ----------- End of out-of-place code -------------- + eventmanager.fire_event("server-starting"); @@ -148,4 +151,13 @@ eventmanager.fire_event("server-started"); -server.loop(); +local quitting; +while not quitting do + xpcall(server.loop, function (err) + if err:match("%d*: interrupted!$") then + quitting = true; + return; + end + eventmanager.fire_event("very-bad-error", "*", err, debug.traceback("", 2)); + end); +end