Modules shared API: prevent unloading of used modules.

This commit is contained in:
antirez 2018-12-20 17:31:55 +01:00
parent 6bb8cdaebe
commit 9403b3d7a3

View File

@ -4896,11 +4896,12 @@ int moduleUnload(sds name) {
if (module == NULL) { if (module == NULL) {
errno = ENOENT; errno = ENOENT;
return REDISMODULE_ERR; return REDISMODULE_ERR;
} } else if (listLength(module->types)) {
if (listLength(module->types)) {
errno = EBUSY; errno = EBUSY;
return REDISMODULE_ERR; return REDISMODULE_ERR;
} else if (listLength(module->usedby)) {
errno = EPERM;
return REDISMODULE_ERR;
} }
moduleUnregisterCommands(module); moduleUnregisterCommands(module);
@ -4966,7 +4967,12 @@ NULL
errmsg = "no such module with that name"; errmsg = "no such module with that name";
break; break;
case EBUSY: case EBUSY:
errmsg = "the module exports one or more module-side data types, can't unload"; errmsg = "the module exports one or more module-side data "
"types, can't unload";
break;
case EPERM:
errmsg = "the module exports APIs used by other modules. "
"Please unload them first and try again";
break; break;
default: default:
errmsg = "operation not possible."; errmsg = "operation not possible.";