Bläddra i källkod

Fixed a case where an agent got unregistered while it had resources

max 8 år sedan
förälder
incheckning
82e3090710
2 ändrade filer med 10 tillägg och 1 borttagningar
  1. 9 1
      src/myco-daemon.c
  2. 1 0
      test/mycoagent.c

+ 9 - 1
src/myco-daemon.c

@@ -67,8 +67,16 @@ int myco_daemon_register_agent(message msg) {
 
 int myco_daemon_unregister_agent(message msg) {
     myco_agent *current_agent;
+    myco_resource *current_resource;
+
+    current_agent = myco_daemon_find_agent(msg.agent_name);
+
+    if ((current_resource = myco_daemon_find_resource_by_agent(msg.agent_name)) != NULL) {
+        sprintf(msg.message, "ERROR: agent %s still has resource %s\n", msg.agent_name, current_resource->name);
+        myco_send(msg.agent_message_queue_id, msg);
 
-    current_agent= myco_daemon_find_agent(msg.agent_name);
+        return -1;
+    }
 
     if (current_agent == NULL) {
         sprintf(msg.message, "ERROR: agent %s could not be unregistered\n", msg.agent_name);

+ 1 - 0
test/mycoagent.c

@@ -15,6 +15,7 @@ int main() {
     myco_agent_register_resource(message_queue_id, "MYAGENT", "MYTRANSACTIONALRESOURCE", RESOURCE_TRANSACTIONAL);
     myco_agent_register_resource(message_queue_id, "MYAGENT2", "MYTRANSACTIONALRESOURCE2", RESOURCE_TRANSACTIONAL);
     myco_agent_request_resource_list(message_queue_id);
+    myco_agent_unregister("MYAGENT", message_queue_id);
     myco_agent_unregister_resource(message_queue_id, "MYTRANSACTIONALRESOURCE");
     myco_agent_unregister("MYAGENT", message_queue_id);