Software / code / prosody
Comparison
plugins/mod_http.lua @ 4696:4700e318add1
mod_http: Use module:hook/unhook_event_object() so that handlers get unregistered if mod_http is unloaded
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 26 Apr 2012 05:40:04 +0100 |
| parent | 4678:9613673f916a |
| child | 4702:5a85e541de1a |
comparison
equal
deleted
inserted
replaced
| 4695:838ad61c6b2c | 4696:4700e318add1 |
|---|---|
| 55 return _handler(event, path); | 55 return _handler(event, path); |
| 56 end; | 56 end; |
| 57 end | 57 end |
| 58 if not app_handlers[event_name] then | 58 if not app_handlers[event_name] then |
| 59 app_handlers[event_name] = handler; | 59 app_handlers[event_name] = handler; |
| 60 server.add_handler(event_name, handler); | 60 module:hook_object_event(server, event_name, handler); |
| 61 else | 61 else |
| 62 module:log("warn", "App %s added handler twice for '%s', ignoring", app_name, event_name); | 62 module:log("warn", "App %s added handler twice for '%s', ignoring", app_name, event_name); |
| 63 end | 63 end |
| 64 else | 64 else |
| 65 module:log("error", "Invalid route in %s: %q", app_name, key); | 65 module:log("error", "Invalid route in %s: %q", app_name, key); |
| 69 | 69 |
| 70 local function http_app_removed(event) | 70 local function http_app_removed(event) |
| 71 local app_handlers = apps[event.item.name]; | 71 local app_handlers = apps[event.item.name]; |
| 72 apps[event.item.name] = nil; | 72 apps[event.item.name] = nil; |
| 73 for event, handler in pairs(app_handlers) do | 73 for event, handler in pairs(app_handlers) do |
| 74 server.remove_handler(event, handler); | 74 module:unhook_object_event(server, event, handler); |
| 75 end | 75 end |
| 76 end | 76 end |
| 77 | 77 |
| 78 module:handle_items("http-provider", http_app_added, http_app_removed); | 78 module:handle_items("http-provider", http_app_added, http_app_removed); |
| 79 end | 79 end |