Fix MODULE UNLOAD crash and/or wrong error message.

This commit is contained in:
Yossi Gottlieb 2016-06-05 13:27:38 +03:00
parent 550fa7e14f
commit 87312ff781

View File

@ -2956,13 +2956,13 @@ int moduleLoad(const char *path) {
int moduleUnload(sds name) { int moduleUnload(sds name) {
struct RedisModule *module = dictFetchValue(modules,name); struct RedisModule *module = dictFetchValue(modules,name);
if (listLength(module->types)) { if (module == NULL) {
errno = EBUSY; errno = ENOENT;
return REDISMODULE_ERR; return REDISMODULE_ERR;
} }
if (module == NULL) { if (listLength(module->types)) {
errno = ENOENT; errno = EBUSY;
return REDISMODULE_ERR; return REDISMODULE_ERR;
} }
@ -3020,10 +3020,17 @@ void moduleCommand(client *c) {
if (moduleUnload(c->argv[2]->ptr) == C_OK) if (moduleUnload(c->argv[2]->ptr) == C_OK)
addReply(c,shared.ok); addReply(c,shared.ok);
else { else {
char *errmsg = "operation not possible."; char *errmsg;
switch(errno) { switch(errno) {
case ENOENT: errmsg = "no such module with that name"; case ENOENT:
case EBUSY: errmsg = "the module exports one or more module-side data types, can't unload"; errmsg = "no such module with that name";
break;
case EBUSY:
errmsg = "the module exports one or more module-side data types, can't unload";
break;
default:
errmsg = "operation not possible.";
break;
} }
addReplyErrorFormat(c,"Error unloading module: %s",errmsg); addReplyErrorFormat(c,"Error unloading module: %s",errmsg);
} }