diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index 3b5f6c33..b8d01607 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -911,7 +911,10 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data) error.error = neu_adapter_driver_del_group( (neu_adapter_driver_t *) adapter, cmd->group); } else { - error.error = NEU_ERR_GROUP_NOT_ALLOW; + adapter->module->intf_funs->request( + adapter->plugin, (neu_reqresp_head_t *) header, &header[1]); + neu_msg_free(msg); + break; } if (error.error == NEU_ERR_SUCCESS) { diff --git a/src/core/manager.c b/src/core/manager.c index 573eb06b..581c148d 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -1098,9 +1098,24 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) neu_msg_exchange(header); reply(manager, header, &e); } else { + UT_array *apps = neu_subscribe_manager_find( + manager->subscribe_manager, cmd->driver, cmd->group); + forward_msg(manager, header, header->receiver); neu_subscribe_manager_remove(manager->subscribe_manager, cmd->driver, cmd->group); + + if (NULL == apps) { + break; + } + + // notify app node about group deletion + utarray_foreach(apps, neu_app_subscribe_t *, app) + { + forward_msg_copy(manager, header, app->app_name); + } + + utarray_free(apps); } break; }