Просмотр исходного кода

ncd: NCDModule, NCDInterpreter: optimize NCDModuleInst_Backend_DownUp()

ambrop7 13 лет назад
Родитель
Сommit
41e88c6250
3 измененных файлов с 22 добавлено и 3 удалено
  1. 19 0
      ncd/NCDInterpreter.c
  2. 1 2
      ncd/NCDModule.c
  3. 2 1
      ncd/NCDModule.h

+ 19 - 0
ncd/NCDInterpreter.c

@@ -1204,6 +1204,25 @@ void statement_instance_func_event (NCDModuleInst *inst, int event)
             }
         } break;
         
+        case NCDMODULE_EVENT_DOWNUP: {
+            ASSERT(ps->inst.istate == SSTATE_ADULT)
+            
+            if (BLog_WouldLog(BLOG_INFO, BLOG_CURRENT_CHANNEL)) {
+                statement_log(ps, BLOG_INFO, "down");
+                statement_log(ps, BLOG_INFO, "up");
+            }
+            
+            // clear error
+            if (ps->i < p->ap) {
+                p->error = 0;
+            }
+            
+            // update AP
+            if (p->ap > ps->i + 1) {
+                p->ap = ps->i + 1;
+            }
+        } break;
+        
         case NCDMODULE_EVENT_DEAD: {
             if (BLog_WouldLog(BLOG_INFO, BLOG_CURRENT_CHANNEL)) {
                 if (ps->inst.is_error) {

+ 1 - 2
ncd/NCDModule.c

@@ -270,8 +270,7 @@ void NCDModuleInst_Backend_DownUp (NCDModuleInst *n)
     DebugObject_Access(&n->d_obj);
     ASSERT(n->state == STATE_UP)
     
-    frontend_event(n, NCDMODULE_EVENT_DOWN);
-    frontend_event(n, NCDMODULE_EVENT_UP);
+    frontend_event(n, NCDMODULE_EVENT_DOWNUP);
 }
 
 void NCDModuleInst_Backend_Dead (NCDModuleInst *n)

+ 2 - 1
ncd/NCDModule.h

@@ -50,7 +50,8 @@
 
 #define NCDMODULE_EVENT_UP 1
 #define NCDMODULE_EVENT_DOWN 2
-#define NCDMODULE_EVENT_DEAD 3
+#define NCDMODULE_EVENT_DOWNUP 3
+#define NCDMODULE_EVENT_DEAD 4
 
 struct NCDModuleInst_s;
 struct NCDModuleProcess_s;