Procházet zdrojové kódy

ncd: NCDModule: remove NCDModuleInst_Backend_SetError() and add NCDModuleInst_Backend_DeadError() instead. Fix modules.

ambrop7 před 13 roky
rodič
revize
f49ecedd13
76 změnil soubory, kde provedl 264 přidání a 384 odebrání
  1. 13 11
      ncd/NCDModule.c
  2. 7 11
      ncd/NCDModule.h
  3. 1 2
      ncd/modules/alias.c
  4. 2 4
      ncd/modules/arithmetic.c
  5. 1 2
      ncd/modules/assert.c
  6. 2 4
      ncd/modules/backtrack.c
  7. 4 8
      ncd/modules/blocker.c
  8. 1 2
      ncd/modules/call.c
  9. 8 16
      ncd/modules/call2.c
  10. 1 2
      ncd/modules/choose.c
  11. 2 4
      ncd/modules/concat.c
  12. 1 2
      ncd/modules/daemon.c
  13. 2 4
      ncd/modules/depend.c
  14. 3 6
      ncd/modules/depend_scope.c
  15. 2 4
      ncd/modules/dynamic_depend.c
  16. 2 3
      ncd/modules/event_template.c
  17. 1 1
      ncd/modules/event_template.h
  18. 1 2
      ncd/modules/exit.c
  19. 1 2
      ncd/modules/explode.c
  20. 3 6
      ncd/modules/file.c
  21. 5 10
      ncd/modules/file_open.c
  22. 3 6
      ncd/modules/foreach.c
  23. 1 2
      ncd/modules/from_string.c
  24. 1 2
      ncd/modules/getargs.c
  25. 1 2
      ncd/modules/if.c
  26. 1 2
      ncd/modules/imperative.c
  27. 1 2
      ncd/modules/implode.c
  28. 2 4
      ncd/modules/index.c
  29. 12 24
      ncd/modules/list.c
  30. 1 2
      ncd/modules/logical.c
  31. 2 4
      ncd/modules/multidepend.c
  32. 1 2
      ncd/modules/net_backend_badvpn.c
  33. 1 2
      ncd/modules/net_backend_rfkill.c
  34. 1 2
      ncd/modules/net_backend_waitdevice.c
  35. 10 8
      ncd/modules/net_backend_waitlink.c
  36. 9 10
      ncd/modules/net_backend_wpa_supplicant.c
  37. 1 2
      ncd/modules/net_dns.c
  38. 4 4
      ncd/modules/net_iptables.c
  39. 1 2
      ncd/modules/net_ipv4_addr.c
  40. 1 2
      ncd/modules/net_ipv4_addr_in_network.c
  41. 10 10
      ncd/modules/net_ipv4_arp_probe.c
  42. 10 8
      ncd/modules/net_ipv4_dhcp.c
  43. 1 2
      ncd/modules/net_ipv4_route.c
  44. 1 2
      ncd/modules/net_ipv6_addr.c
  45. 1 2
      ncd/modules/net_ipv6_addr_in_network.c
  46. 1 2
      ncd/modules/net_ipv6_route.c
  47. 10 8
      ncd/modules/net_ipv6_wait_dynamic_addr.c
  48. 1 2
      ncd/modules/net_up.c
  49. 9 7
      ncd/modules/net_watch_interfaces.c
  50. 3 6
      ncd/modules/netmask.c
  51. 12 11
      ncd/modules/ondemand.c
  52. 3 6
      ncd/modules/parse.c
  53. 3 6
      ncd/modules/print.c
  54. 3 6
      ncd/modules/process_manager.c
  55. 2 4
      ncd/modules/reboot.c
  56. 2 4
      ncd/modules/ref.c
  57. 2 4
      ncd/modules/regex_match.c
  58. 3 2
      ncd/modules/run.c
  59. 1 2
      ncd/modules/runonce.c
  60. 1 2
      ncd/modules/sleep.c
  61. 5 10
      ncd/modules/socket.c
  62. 2 4
      ncd/modules/spawn.c
  63. 1 2
      ncd/modules/strcmp.c
  64. 1 2
      ncd/modules/substr.c
  65. 5 6
      ncd/modules/sys_evdev.c
  66. 8 8
      ncd/modules/sys_request_client.c
  67. 3 6
      ncd/modules/sys_request_server.c
  68. 5 6
      ncd/modules/sys_watch_directory.c
  69. 9 7
      ncd/modules/sys_watch_input.c
  70. 9 7
      ncd/modules/sys_watch_usb.c
  71. 1 2
      ncd/modules/timer.c
  72. 1 2
      ncd/modules/to_string.c
  73. 2 4
      ncd/modules/try.c
  74. 13 26
      ncd/modules/value.c
  75. 1 2
      ncd/modules/valuemetic.c
  76. 2 4
      ncd/modules/var.c

+ 13 - 11
ncd/NCDModule.c

@@ -285,6 +285,19 @@ void NCDModuleInst_Backend_Dead (NCDModuleInst *n)
     return;
 }
 
+void NCDModuleInst_Backend_DeadError (NCDModuleInst *n)
+{
+    DebugObject_Access(&n->d_obj);
+    ASSERT(n->state == STATE_DOWN_CLEAN || n->state == STATE_DOWN_UNCLEAN ||
+           n->state == STATE_UP || n->state == STATE_DYING)
+    
+    n->state = STATE_DEAD;
+    n->is_error = 1;
+    
+    frontend_event(n, NCDMODULE_EVENT_DEAD);
+    return;
+}
+
 int NCDModuleInst_Backend_GetObj (NCDModuleInst *n, NCD_string_id_t name, NCDObject *out_object)
 {
     DebugObject_Access(&n->d_obj);
@@ -316,17 +329,6 @@ void NCDModuleInst_Backend_LogVarArg (NCDModuleInst *n, int channel, int level,
     BLog_LogViaFuncVarArg(n->params->logfunc, n, channel, level, fmt, vl);
 }
 
-void NCDModuleInst_Backend_SetError (NCDModuleInst *n)
-{
-    DebugObject_Access(&n->d_obj);
-    ASSERT(n->state == STATE_DOWN_UNCLEAN || n->state == STATE_DOWN_CLEAN ||
-           n->state == STATE_UP ||
-           n->state == STATE_DYING)
-    ASSERT(!n->is_error)
-    
-    n->is_error = 1;
-}
-
 void NCDModuleInst_Backend_InterpExit (NCDModuleInst *n, int exit_code)
 {
     DebugObject_Access(&n->d_obj);

+ 7 - 11
ncd/NCDModule.h

@@ -515,6 +515,12 @@ void NCDModuleInst_Backend_DownUp (NCDModuleInst *n);
  */
 void NCDModuleInst_Backend_Dead (NCDModuleInst *n);
 
+/**
+ * Like {@link NCDModuleInst_Backend_Dead}, but also reports an error condition
+ * to the interpreter.
+ */
+void NCDModuleInst_Backend_DeadError (NCDModuleInst *n);
+
 /**
  * Resolves an object for a backend instance, from the point of the instance's
  * statement in the containing process.
@@ -542,15 +548,6 @@ void NCDModuleInst_Backend_Log (NCDModuleInst *n, int channel, int level, const
  */
 void NCDModuleInst_Backend_LogVarArg (NCDModuleInst *n, int channel, int level, const char *fmt, va_list vl);
 
-/**
- * Sets the error flag for the module instance.
- * The error flag only has no effect until the backend calls
- * {@link NCDModuleInst_Backend_Dead}.
- * 
- * @param n backend instance handle
- */
-void NCDModuleInst_Backend_SetError (NCDModuleInst *n);
-
 /**
  * Initiates interpreter termination.
  * 
@@ -739,8 +736,7 @@ typedef void (*NCDModule_func_globalfree) (void);
  * The backend is initialized in down state.
  * 
  * If the backend fails initialization, this function should report the backend
- * instance to have died with error by calling {@link NCDModuleInst_Backend_SetError}
- * and {@link NCDModuleInst_Backend_Dead}.
+ * instance to have died with error by calling {@link NCDModuleInst_Backend_DeadError}.
  * 
  * @param o if the module specifies a positive alloc_size value in the {@link NCDModule}
  *          structure, this will point to the allocated memory that can be used by the

+ 1 - 2
ncd/modules/alias.c

@@ -164,8 +164,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 2 - 4
ncd/modules/arithmetic.c

@@ -206,8 +206,7 @@ static void new_boolean_templ (void *vo, NCDModuleInst *i, const struct NCDModul
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static int boolean_func_getvar2 (void *vo, NCD_string_id_t name, NCDValMem *mem, NCDValRef *out)
@@ -258,8 +257,7 @@ static void new_number_templ (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static int number_func_getvar2 (void *vo, NCD_string_id_t name, NCDValMem *mem, NCDValRef *out)

+ 1 - 2
ncd/modules/assert.c

@@ -75,8 +75,7 @@ static void func_new_common (NCDModuleInst *i, const struct NCDModuleInst_new_pa
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)

+ 2 - 4
ncd/modules/backtrack.c

@@ -61,8 +61,7 @@ static void func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void go_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -84,8 +83,7 @@ static void go_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 4 - 8
ncd/modules/blocker.c

@@ -130,8 +130,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void instance_free (struct instance *o)
@@ -203,8 +202,7 @@ static void updown_func_new_templ (NCDModuleInst *i, const struct NCDModuleInst_
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void up_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -247,8 +245,7 @@ static void rdownup_func_new (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void rdownup_func_die (void *vo)
@@ -303,8 +300,7 @@ static void use_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void use_func_die (void *vo)

+ 1 - 2
ncd/modules/call.c

@@ -245,8 +245,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 void instance_free (struct instance *o)

+ 8 - 16
ncd/modules/call2.c

@@ -171,8 +171,7 @@ static void func_new_templ (void *vo, NCDModuleInst *i, NCDValRef template_name,
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void instance_free (struct instance *o)
@@ -202,8 +201,7 @@ static void func_new_call (void *vo, NCDModuleInst *i, const struct NCDModuleIns
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_embcall (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -222,8 +220,7 @@ static void func_new_embcall (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_call_if (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -248,8 +245,7 @@ static void func_new_call_if (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_embcall_if (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -273,8 +269,7 @@ static void func_new_embcall_if (void *vo, NCDModuleInst *i, const struct NCDMod
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_call_ifelse (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -304,8 +299,7 @@ static void func_new_call_ifelse (void *vo, NCDModuleInst *i, const struct NCDMo
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_embcall_ifelse (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -334,8 +328,7 @@ static void func_new_embcall_ifelse (void *vo, NCDModuleInst *i, const struct NC
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_embcall_multif (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -379,8 +372,7 @@ static void func_new_embcall_multif (void *vo, NCDModuleInst *i, const struct NC
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 1 - 2
ncd/modules/choose.c

@@ -114,8 +114,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static int func_getvar2 (void *vo, NCD_string_id_t name, NCDValMem *mem, NCDValRef *out)

+ 2 - 4
ncd/modules/concat.c

@@ -115,8 +115,7 @@ static void new_concat_common (void *vo, NCDModuleInst *i, NCDValRef list)
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_concat (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -140,8 +139,7 @@ static void func_new_concatv (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 1 - 2
ncd/modules/daemon.c

@@ -228,8 +228,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void instance_free (struct instance *o)

+ 2 - 4
ncd/modules/depend.c

@@ -214,8 +214,7 @@ static void provide_func_new_templ (void *vo, NCDModuleInst *i, const struct NCD
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void provide_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -324,8 +323,7 @@ static void depend_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void depend_free (struct depend *o)

+ 3 - 6
ncd/modules/depend_scope.c

@@ -231,8 +231,7 @@ static void scope_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleIn
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void scope_func_die (void *vo)
@@ -296,8 +295,7 @@ static void provide_func_new (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void provide_free (struct provide *o)
@@ -374,8 +372,7 @@ static void depend_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void depend_func_die (void *vo)

+ 2 - 4
ncd/modules/dynamic_depend.c

@@ -341,8 +341,7 @@ static void provide_func_new (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void provide_free (struct provide *o)
@@ -429,8 +428,7 @@ static void depend_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void depend_func_die (void *vo)

+ 2 - 3
ncd/modules/event_template.c

@@ -91,8 +91,7 @@ void event_template_new (event_template *o, NCDModuleInst *i, int blog_channel,
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(o->i);
-    o->func_free(o->user);
+    o->func_free(o->user, 1);
     return;
 }
 
@@ -114,7 +113,7 @@ void event_template_die (event_template *o)
     // free events array
     BFree(o->events);
     
-    o->func_free(o->user);
+    o->func_free(o->user, 0);
     return;
 }
 

+ 1 - 1
ncd/modules/event_template.h

@@ -34,7 +34,7 @@
 #include <stringmap/BStringMap.h>
 #include <ncd/NCDModule.h>
 
-typedef void (*event_template_func_free) (void *user);
+typedef void (*event_template_func_free) (void *user, int is_error);
 
 typedef struct {
     NCDModuleInst *i;

+ 1 - 2
ncd/modules/exit.c

@@ -74,8 +74,7 @@ static void func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 1 - 2
ncd/modules/explode.c

@@ -171,8 +171,7 @@ fail2:
 fail1:
     BFree(table);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 3 - 6
ncd/modules/file.c

@@ -148,8 +148,7 @@ static void read_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleIns
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void read_func_die (void *vo)
@@ -208,8 +207,7 @@ static void write_func_new (void *unused, NCDModuleInst *i, const struct NCDModu
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void stat_func_new_common (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params, int is_lstat)
@@ -259,8 +257,7 @@ out:
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void stat_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)

+ 5 - 10
ncd/modules/file_open.c

@@ -267,8 +267,7 @@ static void open_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleIns
 fail1:
     NCDBufStore_Free(&o->store);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void open_func_die (void *vo)
@@ -357,8 +356,7 @@ static void read_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleIns
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void read_func_die (void *vo)
@@ -434,8 +432,7 @@ static void write_func_new (void *unused, NCDModuleInst *i, const struct NCDModu
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void seek_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -517,8 +514,7 @@ static void seek_func_new (void *unused, NCDModuleInst *i, const struct NCDModul
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void close_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -552,8 +548,7 @@ static void close_func_new (void *unused, NCDModuleInst *i, const struct NCDModu
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 3 - 6
ncd/modules/foreach.c

@@ -565,8 +565,7 @@ static void func_new_common (void *vo, NCDModuleInst *i, NCDValRef collection, N
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_foreach (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -605,8 +604,7 @@ static void func_new_foreach (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_foreach_emb (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -644,8 +642,7 @@ static void func_new_foreach_emb (void *vo, NCDModuleInst *i, const struct NCDMo
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void instance_free (struct instance *o)

+ 1 - 2
ncd/modules/from_string.c

@@ -83,8 +83,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
 fail1:
     NCDValMem_Free(&o->mem);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 1 - 2
ncd/modules/getargs.c

@@ -64,8 +64,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static int func_getvar2 (void *vo, NCD_string_id_t name, NCDValMem *mem, NCDValRef *out)

+ 1 - 2
ncd/modules/if.c

@@ -73,8 +73,7 @@ static void new_templ (NCDModuleInst *i, const struct NCDModuleInst_new_params *
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)

+ 1 - 2
ncd/modules/imperative.c

@@ -291,8 +291,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void instance_free (struct instance *o)

+ 1 - 2
ncd/modules/implode.c

@@ -113,8 +113,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
 fail1:
     ExpString_Free(&str);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 2 - 4
ncd/modules/index.c

@@ -101,8 +101,7 @@ static void func_new_from_value (void *vo, NCDModuleInst *i, const struct NCDMod
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_from_index (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -119,8 +118,7 @@ static void func_new_from_index (void *vo, NCDModuleInst *i, const struct NCDMod
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 12 - 24
ncd/modules/list.c

@@ -335,8 +335,7 @@ static void func_new_list (void *vo, NCDModuleInst *i, const struct NCDModuleIns
     
 fail1:
     cut_list_front(o, 0);
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_listfrom (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -358,8 +357,7 @@ static void func_new_listfrom (void *vo, NCDModuleInst *i, const struct NCDModul
     
 fail1:
     cut_list_front(o, 0);
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)
@@ -414,8 +412,7 @@ static void append_func_new (void *unused, NCDModuleInst *i, const struct NCDMod
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void appendv_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -444,8 +441,7 @@ static void appendv_func_new (void *unused, NCDModuleInst *i, const struct NCDMo
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void length_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -471,8 +467,7 @@ static void length_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void length_func_die (void *vo)
@@ -543,8 +538,7 @@ static void get_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst
 fail1:
     NCDValMem_Free(&o->mem);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void get_func_die (void *vo)
@@ -594,8 +588,7 @@ static void shift_func_new (void *unused, NCDModuleInst *i, const struct NCDModu
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void contains_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -621,8 +614,7 @@ static void contains_func_new (void *vo, NCDModuleInst *i, const struct NCDModul
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void contains_func_die (void *vo)
@@ -679,8 +671,7 @@ static void find_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleIns
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void find_func_die (void *vo)
@@ -750,8 +741,7 @@ static void removeat_func_new (void *unused, NCDModuleInst *i, const struct NCDM
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void remove_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -781,8 +771,7 @@ static void remove_func_new (void *unused, NCDModuleInst *i, const struct NCDMod
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void set_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -806,8 +795,7 @@ static void set_func_new (void *unused, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 1 - 2
ncd/modules/logical.c

@@ -104,8 +104,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_not (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)

+ 2 - 4
ncd/modules/multidepend.c

@@ -218,8 +218,7 @@ static void provide_func_new (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void provide_free (struct provide *o)
@@ -286,8 +285,7 @@ static void depend_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void depend_func_die (void *vo)

+ 1 - 2
ncd/modules/net_backend_badvpn.c

@@ -222,8 +222,7 @@ fail2:
 fail1:
     NCDValNullTermString_Free(&o->ifname_nts);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 void instance_free (struct instance *o)

+ 1 - 2
ncd/modules/net_backend_rfkill.c

@@ -187,8 +187,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
 fail1:
     NCDValNullTermString_Free(&name_nts);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 1 - 2
ncd/modules/net_backend_waitdevice.c

@@ -150,8 +150,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
 fail1:
     NCDUdevClient_Free(&o->client);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 10 - 8
ncd/modules/net_backend_waitlink.c

@@ -51,7 +51,7 @@ struct instance {
     int up;
 };
 
-static void instance_free (struct instance *o);
+static void instance_free (struct instance *o, int is_error);
 
 static void monitor_handler (struct instance *o, struct NCDInterfaceMonitor_event event)
 {
@@ -72,8 +72,7 @@ static void monitor_handler_error (struct instance *o)
 {
     ModuleLog(o->i, BLOG_ERROR, "monitor error");
     
-    NCDModuleInst_Backend_SetError(o->i);
-    instance_free(o);
+    instance_free(o, 1);
 }
 
 static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -119,22 +118,25 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
-static void instance_free (struct instance *o)
+static void instance_free (struct instance *o, int is_error)
 {
     // free monitor
     NCDInterfaceMonitor_Free(&o->monitor);
     
-    NCDModuleInst_Backend_Dead(o->i);
+    if (is_error) {
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
+    }
 }
 
 static void func_die (void *vo)
 {
     struct instance *o = vo;
-    instance_free(o);
+    instance_free(o, 0);
 }
 
 static struct NCDModule modules[] = {

+ 9 - 10
ncd/modules/net_backend_wpa_supplicant.c

@@ -97,7 +97,7 @@ static void process_error (struct instance *o);
 static void process_handler_terminated (struct instance *o, int normally, uint8_t normally_exit_status);
 static void process_handler_closed (struct instance *o, int is_error);
 static void process_pipe_handler_send (struct instance *o, uint8_t *data, int data_len);
-static void instance_free (struct instance *o);
+static void instance_free (struct instance *o, int is_error);
 
 int parse_hex_digit (uint8_t d, uint8_t *out)
 {
@@ -301,12 +301,8 @@ void process_handler_terminated (struct instance *o, int normally, uint8_t norma
 {
     ModuleLog(o->i, (o->dying ? BLOG_INFO : BLOG_ERROR), "process terminated");
     
-    if (!o->dying) {
-        NCDModuleInst_Backend_SetError(o->i);
-    }
-    
     // die
-    instance_free(o);
+    instance_free(o, !o->dying);
     return;
 }
 
@@ -482,11 +478,10 @@ fail2:
 fail1:
     CmdLine_Free(&c);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
-void instance_free (struct instance *o)
+void instance_free (struct instance *o, int is_error)
 {
     // free info
     if (o->have_info) {
@@ -504,7 +499,11 @@ void instance_free (struct instance *o)
     // free process
     BInputProcess_Free(&o->process);
     
-    NCDModuleInst_Backend_Dead(o->i);
+    if (is_error) {
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
+    }
 }
 
 static void func_die (void *vo)

+ 1 - 2
ncd/modules/net_dns.c

@@ -253,8 +253,7 @@ fail2:
     LinkedList1_Remove(&instances, &o->instances_node);
 fail1:
     remove_ipv4_dns_entries(o);
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 4 - 4
ncd/modules/net_iptables.c

@@ -406,9 +406,10 @@ void template_free_func (void *vo, int is_error)
     struct instance *o = vo;
     
     if (is_error) {
-        NCDModuleInst_Backend_SetError(o->i);
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
     }
-    NCDModuleInst_Backend_Dead(o->i);
 }
 
 static void append_iptables_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -526,8 +527,7 @@ static void unlock_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void unlock_func_die (void *vo)

+ 1 - 2
ncd/modules/net_ipv4_addr.c

@@ -114,8 +114,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
 fail1:
     NCDValNullTermString_Free(&o->ifname_nts);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 1 - 2
ncd/modules/net_ipv4_addr_in_network.c

@@ -122,8 +122,7 @@ static void func_new_common (void *vo, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_normal (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)

+ 10 - 10
ncd/modules/net_ipv4_arp_probe.c

@@ -65,7 +65,7 @@ struct instance {
     int state;
 };
 
-static void instance_free (struct instance *o);
+static void instance_free (struct instance *o, int is_error);
 
 static void arpprobe_handler (struct instance *o, int event)
 {
@@ -107,11 +107,8 @@ static void arpprobe_handler (struct instance *o, int event)
         case BARPPROBE_EVENT_ERROR: {
             ModuleLog(o->i, BLOG_ERROR, "error");
             
-            // set error
-            NCDModuleInst_Backend_SetError(o->i);
-            
             // die
-            instance_free(o);
+            instance_free(o, 1);
             return;
         } break;
         
@@ -163,23 +160,26 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
-static void instance_free (struct instance *o)
+static void instance_free (struct instance *o, int is_error)
 {
     // free arpprobe
     BArpProbe_Free(&o->arpprobe);
     
-    NCDModuleInst_Backend_Dead(o->i);
+    if (is_error) {
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
+    }
 }
 
 static void func_die (void *vo)
 {
     struct instance *o = vo;
     
-    instance_free(o);
+    instance_free(o, 0);
 }
 
 static int func_getvar (void *vo, const char *name, NCDValMem *mem, NCDValRef *out)

+ 10 - 8
ncd/modules/net_ipv4_dhcp.c

@@ -72,7 +72,7 @@ struct instance {
     int up;
 };
 
-static void instance_free (struct instance *o);
+static void instance_free (struct instance *o, int is_error);
 
 static void dhcp_handler (struct instance *o, int event)
 {
@@ -90,8 +90,7 @@ static void dhcp_handler (struct instance *o, int event)
         } break;
         
         case BDHCPCLIENT_EVENT_ERROR: {
-            NCDModuleInst_Backend_SetError(o->i);
-            instance_free(o);
+            instance_free(o, 1);
             return;
         } break;
         
@@ -200,23 +199,26 @@ fail1:
     NCDValNullTermString_Free(&hostname_nts);
     NCDValNullTermString_Free(&vendorclassid_nts);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
-static void instance_free (struct instance *o)
+static void instance_free (struct instance *o, int is_error)
 {
     // free DHCP
     BDHCPClient_Free(&o->dhcp);
     
-    NCDModuleInst_Backend_Dead(o->i);
+    if (is_error) {
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
+    }
 }
 
 static void func_die (void *vo)
 {
     struct instance *o = vo;
     
-    instance_free(o);
+    instance_free(o, 0);
 }
 
 static int func_getvar (void *vo, const char *name, NCDValMem *mem, NCDValRef *out)

+ 1 - 2
ncd/modules/net_ipv4_route.c

@@ -164,8 +164,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
 fail1:
     NCDValNullTermString_Free(&o->ifname_nts);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 1 - 2
ncd/modules/net_ipv6_addr.c

@@ -114,8 +114,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
 fail1:
     NCDValNullTermString_Free(&o->ifname_nts);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 1 - 2
ncd/modules/net_ipv6_addr_in_network.c

@@ -122,8 +122,7 @@ static void func_new_common (void *vo, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_normal (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)

+ 1 - 2
ncd/modules/net_ipv6_route.c

@@ -166,8 +166,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
 fail1:
     NCDValNullTermString_Free(&o->ifname_nts);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 10 - 8
ncd/modules/net_ipv6_wait_dynamic_addr.c

@@ -63,7 +63,7 @@ struct instance {
     int up;
 };
 
-static void instance_free (struct instance *o);
+static void instance_free (struct instance *o, int is_error);
 
 static void monitor_handler (struct instance *o, struct NCDInterfaceMonitor_event event)
 {
@@ -88,8 +88,7 @@ static void monitor_handler_error (struct instance *o)
 {
     ModuleLog(o->i, BLOG_ERROR, "monitor error");
     
-    NCDModuleInst_Backend_SetError(o->i);
-    instance_free(o);
+    instance_free(o, 1);
 }
 
 static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -135,22 +134,25 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
-static void instance_free (struct instance *o)
+static void instance_free (struct instance *o, int is_error)
 {
     // free monitor
     NCDInterfaceMonitor_Free(&o->monitor);
     
-    NCDModuleInst_Backend_Dead(o->i);
+    if (is_error) {
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
+    }
 }
 
 static void func_die (void *vo)
 {
     struct instance *o = vo;
-    instance_free(o);
+    instance_free(o, 0);
 }
 
 static int func_getvar (void *vo, const char *name, NCDValMem *mem, NCDValRef *out)

+ 1 - 2
ncd/modules/net_up.c

@@ -85,8 +85,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
 fail1:
     NCDValNullTermString_Free(&o->ifname_nts);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 9 - 7
ncd/modules/net_watch_interfaces.c

@@ -83,7 +83,7 @@ struct instance {
     event_template templ;
 };
 
-static void templ_func_free (struct instance *o);
+static void templ_func_free (struct instance *o, int is_error);
 
 static struct device * find_device_by_ifname (struct instance *o, const char *ifname)
 {
@@ -385,11 +385,10 @@ fail2:
 fail1:
     NCDUdevClient_Free(&o->client);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
-static void templ_func_free (struct instance *o)
+static void templ_func_free (struct instance *o, int is_error)
 {
     // free devices
     LinkedList1Node *list_node;
@@ -406,7 +405,11 @@ static void templ_func_free (struct instance *o)
     // free client
     NCDUdevClient_Free(&o->client);
     
-    NCDModuleInst_Backend_Dead(o->i);
+    if (is_error) {
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
+    }
 }
 
 static void func_die (void *vo)
@@ -448,8 +451,7 @@ static void nextevent_func_new (void *unused, NCDModuleInst *i, const struct NCD
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 3 - 6
ncd/modules/netmask.c

@@ -112,8 +112,7 @@ static void prefix_to_mask_func_init (void *vo, NCDModuleInst *i, const struct N
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void ipv4_net_from_addr_and_prefix_func_init (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -151,8 +150,7 @@ static void ipv4_net_from_addr_and_prefix_func_init (void *vo, NCDModuleInst *i,
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void addr_func_die (void *vo)
@@ -211,8 +209,7 @@ static void mask_to_prefix_func_init (void *vo, NCDModuleInst *i, const struct N
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void prefix_func_die (void *vo)

+ 12 - 11
ncd/modules/ondemand.c

@@ -86,7 +86,7 @@ static int ondemand_start_process (struct ondemand *o);
 static void ondemand_terminate_process (struct ondemand *o);
 static void ondemand_process_handler (NCDModuleProcess *process, int event);
 static void ondemand_free (struct ondemand *o);
-static void demand_free (struct demand *o);
+static void demand_free (struct demand *o, int is_error);
 
 static int ondemand_start_process (struct ondemand *o)
 {
@@ -200,8 +200,7 @@ static void ondemand_process_handler (NCDModuleProcess *process, int event)
                     while (!LinkedList1_IsEmpty(&o->demands_list)) {
                         struct demand *demand = UPPER_OBJECT(LinkedList1_GetFirst(&o->demands_list), struct demand, demands_list_node);
                         ASSERT(demand->od == o)
-                        NCDModuleInst_Backend_SetError(demand->i);
-                        demand_free(demand);
+                        demand_free(demand, 1);
                     }
                 }
             }
@@ -242,8 +241,7 @@ static void ondemand_func_new (void *vo, NCDModuleInst *i, const struct NCDModul
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void ondemand_free (struct ondemand *o)
@@ -254,7 +252,7 @@ static void ondemand_free (struct ondemand *o)
     while (!LinkedList1_IsEmpty(&o->demands_list)) {
         struct demand *demand = UPPER_OBJECT(LinkedList1_GetFirst(&o->demands_list), struct demand, demands_list_node);
         ASSERT(demand->od == o)
-        demand_free(demand);
+        demand_free(demand, 0);
     }
     
     NCDModuleInst_Backend_Dead(o->i);
@@ -316,11 +314,10 @@ static void demand_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleI
 fail1:
     LinkedList1_Remove(&o->od->demands_list, &o->demands_list_node);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
-static void demand_free (struct demand *o)
+static void demand_free (struct demand *o, int is_error)
 {
     // remove from ondemand's demands list
     LinkedList1_Remove(&o->od->demands_list, &o->demands_list_node);
@@ -330,14 +327,18 @@ static void demand_free (struct demand *o)
         ondemand_terminate_process(o->od);
     }
     
-    NCDModuleInst_Backend_Dead(o->i);
+    if (is_error) {
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
+    }
 }
 
 static void demand_func_die (void *vo)
 {
     struct demand *o = vo;
     
-    demand_free(o);
+    demand_free(o, 0);
 }
 
 static int demand_func_getobj (void *vo, NCD_string_id_t objname, NCDObject *out_object)

+ 3 - 6
ncd/modules/parse.c

@@ -183,8 +183,7 @@ static void new_templ (void *vo, NCDModuleInst *i, const struct NCDModuleInst_ne
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)
@@ -255,8 +254,7 @@ static void ipv4_cidr_addr_func_new (void *vo, NCDModuleInst *i, const struct NC
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static int ipv4_cidr_addr_func_getvar2 (void *vo, NCD_string_id_t name, NCDValMem *mem, NCDValRef *out)
@@ -312,8 +310,7 @@ static void ipv6_cidr_addr_func_new (void *vo, NCDModuleInst *i, const struct NC
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static int ipv6_cidr_addr_func_getvar2 (void *vo, NCD_string_id_t name, NCDValMem *mem, NCDValRef *out)

+ 3 - 6
ncd/modules/print.c

@@ -124,8 +124,7 @@ static void rprint_func_new_common (void *vo, NCDModuleInst *i, const struct NCD
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void rprint_func_die (void *vo)
@@ -149,8 +148,7 @@ static void print_func_new (void *unused, NCDModuleInst *i, const struct NCDModu
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void println_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -165,8 +163,7 @@ static void println_func_new (void *unused, NCDModuleInst *i, const struct NCDMo
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void rprint_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)

+ 3 - 6
ncd/modules/process_manager.c

@@ -410,8 +410,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 void instance_free (struct instance *o)
@@ -493,8 +492,7 @@ static void start_func_new (void *unused, NCDModuleInst *i, const struct NCDModu
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void stop_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -527,8 +525,7 @@ static void stop_func_new (void *unused, NCDModuleInst *i, const struct NCDModul
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 2 - 4
ncd/modules/reboot.c

@@ -61,8 +61,7 @@ static void func_new_hard_reboot (void *unused, NCDModuleInst *i, const struct N
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_hard_poweroff (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -84,8 +83,7 @@ static void func_new_hard_poweroff (void *unused, NCDModuleInst *i, const struct
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 2 - 4
ncd/modules/ref.c

@@ -87,8 +87,7 @@ static void refhere_func_new (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void refhere_func_die (void *vo)
@@ -140,8 +139,7 @@ static void ref_func_new_templ (void *vo, NCDModuleInst *i, const struct NCDModu
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void ref_func_new_from_refhere (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)

+ 2 - 4
ncd/modules/regex_match.c

@@ -152,8 +152,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static int func_getvar (void *vo, const char *name, NCDValMem *mem, NCDValRef *out)
@@ -323,8 +322,7 @@ fail2:
     }
     BFree(regs);
 fail1:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void replace_func_die (void *vo)

+ 3 - 2
ncd/modules/run.c

@@ -156,9 +156,10 @@ void template_free_func (void *vo, int is_error)
     BEventLock_Free(&o->lock);
     
     if (is_error) {
-        NCDModuleInst_Backend_SetError(o->i);
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
     }
-    NCDModuleInst_Backend_Dead(o->i);
 }
 
 static void func_die (void *vo)

+ 1 - 2
ncd/modules/runonce.c

@@ -265,8 +265,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void instance_free (struct instance *o)

+ 1 - 2
ncd/modules/sleep.c

@@ -114,8 +114,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 void instance_free (struct instance *o)

+ 5 - 10
ncd/modules/socket.c

@@ -670,8 +670,7 @@ error:
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void connect_func_die (void *vo)
@@ -761,8 +760,7 @@ static void read_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleIns
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void read_func_die (void *vo)
@@ -854,8 +852,7 @@ static void write_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleIn
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void write_func_die (void *vo)
@@ -897,8 +894,7 @@ static void close_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleIn
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void listen_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -962,8 +958,7 @@ error:
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void listen_func_die (void *vo)

+ 2 - 4
ncd/modules/spawn.c

@@ -252,8 +252,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 void instance_free (struct instance *o)
@@ -321,8 +320,7 @@ static void join_func_new (void *vo, NCDModuleInst *i, const struct NCDModuleIns
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void join_func_die (void *vo)

+ 1 - 2
ncd/modules/strcmp.c

@@ -76,8 +76,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static int func_getvar2 (void *vo, NCD_string_id_t name, NCDValMem *mem, NCDValRef *out)

+ 1 - 2
ncd/modules/substr.c

@@ -148,8 +148,7 @@ static void func_new_substr (void *vo, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 5 - 6
ncd/modules/sys_evdev.c

@@ -202,8 +202,7 @@ fail1:
         ModuleLog(o->i, BLOG_ERROR, "close failed");
     }
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 void instance_free (struct instance *o, int is_error)
@@ -218,9 +217,10 @@ void instance_free (struct instance *o, int is_error)
     }
     
     if (is_error) {
-        NCDModuleInst_Backend_SetError(o->i);
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
     }
-    NCDModuleInst_Backend_Dead(o->i);
 }
 
 static void func_die (void *vo)
@@ -323,8 +323,7 @@ static void nextevent_func_new (void *unused, NCDModuleInst *i, const struct NCD
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 8 - 8
ncd/modules/sys_request_client.c

@@ -504,8 +504,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void instance_free (struct instance *o, int with_error)
@@ -521,9 +520,10 @@ static void instance_free (struct instance *o, int with_error)
     NCDRequestClient_Free(&o->client);
     
     if (with_error) {
-        NCDModuleInst_Backend_SetError(o->i);
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
     }
-    NCDModuleInst_Backend_Dead(o->i);
 }
 
 static void func_die (void *vo)
@@ -589,8 +589,7 @@ static void request_func_new (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void request_instance_free (struct request_instance *o, int with_error)
@@ -610,9 +609,10 @@ static void request_instance_free (struct request_instance *o, int with_error)
     }
     
     if (with_error) {
-        NCDModuleInst_Backend_SetError(o->i);
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
     }
-    NCDModuleInst_Backend_Dead(o->i);
 }
 
 static void request_func_die (void *vo)

+ 3 - 6
ncd/modules/sys_request_server.c

@@ -654,8 +654,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void instance_free (struct instance *o)
@@ -723,8 +722,7 @@ static void reply_func_new (void *unused, NCDModuleInst *i, const struct NCDModu
     return;
     
 fail:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void finish_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -749,8 +747,7 @@ static void finish_func_new (void *unused, NCDModuleInst *i, const struct NCDMod
     return;
     
 fail:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 5 - 6
ncd/modules/sys_watch_directory.c

@@ -304,8 +304,7 @@ fail2:
 fail1:
     NCDValNullTermString_Free(&o->dir_nts);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 void instance_free (struct instance *o, int is_error)
@@ -329,9 +328,10 @@ void instance_free (struct instance *o, int is_error)
     NCDValNullTermString_Free(&o->dir_nts);
     
     if (is_error) {
-        NCDModuleInst_Backend_SetError(o->i);
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
     }
-    NCDModuleInst_Backend_Dead(o->i);
 }
 
 static void func_die (void *vo)
@@ -402,8 +402,7 @@ static void nextevent_func_new (void *unused, NCDModuleInst *i, const struct NCD
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 9 - 7
ncd/modules/sys_watch_input.c

@@ -77,7 +77,7 @@ struct instance {
     event_template templ;
 };
 
-static void templ_func_free (struct instance *o);
+static void templ_func_free (struct instance *o, int is_error);
 
 static struct device * find_device_by_devname (struct instance *o, const char *devname)
 {
@@ -371,11 +371,10 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
-static void templ_func_free (struct instance *o)
+static void templ_func_free (struct instance *o, int is_error)
 {
     // free devices
     LinkedList1Node *list_node;
@@ -387,7 +386,11 @@ static void templ_func_free (struct instance *o)
     // free client
     NCDUdevClient_Free(&o->client);
     
-    NCDModuleInst_Backend_Dead(o->i);
+    if (is_error) {
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
+    }
 }
 
 static void func_die (void *vo)
@@ -429,8 +432,7 @@ static void nextevent_func_new (void *unused, NCDModuleInst *i, const struct NCD
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 9 - 7
ncd/modules/sys_watch_usb.c

@@ -78,7 +78,7 @@ struct instance {
     event_template templ;
 };
 
-static void templ_func_free (struct instance *o);
+static void templ_func_free (struct instance *o, int is_error);
 
 static struct device * find_device_by_devname (struct instance *o, const char *devname)
 {
@@ -338,11 +338,10 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
-static void templ_func_free (struct instance *o)
+static void templ_func_free (struct instance *o, int is_error)
 {
     // free devices
     while (!LinkedList1_IsEmpty(&o->devices_list)) {
@@ -353,7 +352,11 @@ static void templ_func_free (struct instance *o)
     // free client
     NCDUdevClient_Free(&o->client);
     
-    NCDModuleInst_Backend_Dead(o->i);
+    if (is_error) {
+        NCDModuleInst_Backend_DeadError(o->i);
+    } else {
+        NCDModuleInst_Backend_Dead(o->i);
+    }
 }
 
 static void func_die (void *vo)
@@ -395,8 +398,7 @@ static void nextevent_func_new (void *unused, NCDModuleInst *i, const struct NCD
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 1 - 2
ncd/modules/timer.c

@@ -117,8 +117,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 1 - 2
ncd/modules/to_string.c

@@ -73,8 +73,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 2 - 4
ncd/modules/try.c

@@ -201,8 +201,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void instance_free (struct instance *o)
@@ -277,8 +276,7 @@ static void assert_func_new (void *unused, NCDModuleInst *i, const struct NCDMod
     return;
     
 fail1:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 13 - 26
ncd/modules/value.c

@@ -1201,8 +1201,7 @@ static void func_new_value (void *vo, NCDModuleInst *i, const struct NCDModuleIn
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_get (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1230,8 +1229,7 @@ static void func_new_get (void *vo, NCDModuleInst *i, const struct NCDModuleInst
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_try_get (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1256,8 +1254,7 @@ static void func_new_try_get (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_getpath (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1289,8 +1286,7 @@ static void func_new_getpath (void *vo, NCDModuleInst *i, const struct NCDModule
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_insert_replace_common (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params, int is_replace)
@@ -1326,8 +1322,7 @@ static void func_new_insert_replace_common (void *vo, NCDModuleInst *i, const st
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_insert (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1432,8 +1427,7 @@ static void func_new_insert_replace_undo_common (void *vo, NCDModuleInst *i, con
 fail1:
     free(data);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_insert_undo (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1496,8 +1490,7 @@ static void func_new_replace_this (void *vo, NCDModuleInst *i, const struct NCDM
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_replace_this_undo (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1559,8 +1552,7 @@ static void func_new_replace_this_undo (void *vo, NCDModuleInst *i, const struct
 fail1:
     value_cleanup(v);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_new_substr (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1629,8 +1621,7 @@ static void func_new_substr (void *vo, NCDModuleInst *i, const struct NCDModuleI
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void remove_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1657,8 +1648,7 @@ static void remove_func_new (void *unused, NCDModuleInst *i, const struct NCDMod
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void delete_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1682,8 +1672,7 @@ static void delete_func_new (void *unused, NCDModuleInst *i, const struct NCDMod
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void reset_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1720,8 +1709,7 @@ static void reset_func_new (void *unused, NCDModuleInst *i, const struct NCDModu
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void append_func_new (void *unused, NCDModuleInst *i, const struct NCDModuleInst_new_params *params)
@@ -1748,8 +1736,7 @@ static void append_func_new (void *unused, NCDModuleInst *i, const struct NCDMod
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {

+ 1 - 2
ncd/modules/valuemetic.c

@@ -120,8 +120,7 @@ static void new_templ (void *vo, NCDModuleInst *i, const struct NCDModuleInst_ne
     return;
     
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)

+ 2 - 4
ncd/modules/var.c

@@ -81,8 +81,7 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
 fail1:
     NCDValMem_Free(&o->mem);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static void func_die (void *vo)
@@ -141,8 +140,7 @@ static void set_func_new (void *unused, NCDModuleInst *i, const struct NCDModule
 fail1:
     NCDValMem_Free(&mem);
 fail0:
-    NCDModuleInst_Backend_SetError(i);
-    NCDModuleInst_Backend_Dead(i);
+    NCDModuleInst_Backend_DeadError(i);
 }
 
 static struct NCDModule modules[] = {