summaryrefslogtreecommitdiff
path: root/usr/src/lib/libscf/common/midlevel.c
diff options
context:
space:
mode:
authorGary Mills <mills@cc.umanitoba.ca>2009-07-08 11:30:42 -0700
committerGary Mills <mills@cc.umanitoba.ca>2009-07-08 11:30:42 -0700
commitbf6e99cceb70ebe39bcb68342a0c8b6610de138a (patch)
treed9a08265913bcbea4a6c9450582bfb89f9107fb5 /usr/src/lib/libscf/common/midlevel.c
parente23347b1b88ce2c0847fad6e9467a1f953597aa7 (diff)
downloadillumos-joyent-bf6e99cceb70ebe39bcb68342a0c8b6610de138a.tar.gz
6383235 smf_maintain_instance() shouldn't fail with SCF_ERROR_DELETED
Diffstat (limited to 'usr/src/lib/libscf/common/midlevel.c')
-rw-r--r--usr/src/lib/libscf/common/midlevel.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/usr/src/lib/libscf/common/midlevel.c b/usr/src/lib/libscf/common/midlevel.c
index a27854e82b..72795f9553 100644
--- a/usr/src/lib/libscf/common/midlevel.c
+++ b/usr/src/lib/libscf/common/midlevel.c
@@ -946,10 +946,21 @@ set_inst_action(const char *fmri, const char *action)
if (inst != NULL) {
if (scf_handle_decode_fmri(h, fmri, NULL, NULL, inst, NULL,
- NULL, SCF_DECODE_FMRI_EXACT) == 0)
+ NULL, SCF_DECODE_FMRI_EXACT) == 0) {
ret = set_inst_action_inst(inst, action);
- else if (scf_error() == SCF_ERROR_CONSTRAINT_VIOLATED)
- (void) scf_set_error(SCF_ERROR_INVALID_ARGUMENT);
+ if (ret == -1 && scf_error() == SCF_ERROR_DELETED)
+ (void) scf_set_error(SCF_ERROR_NOT_FOUND);
+ } else {
+ switch (scf_error()) {
+ case SCF_ERROR_CONSTRAINT_VIOLATED:
+ (void) scf_set_error(
+ SCF_ERROR_INVALID_ARGUMENT);
+ break;
+ case SCF_ERROR_DELETED:
+ (void) scf_set_error(SCF_ERROR_NOT_FOUND);
+ break;
+ }
+ }
scf_instance_destroy(inst);
}
@@ -1106,6 +1117,8 @@ set_inst_enabled_flags(const char *fmri, int flags, uint8_t desired)
out:
scf_instance_destroy(inst);
scf_handle_destroy(h);
+ if (ret == -1 && scf_error() == SCF_ERROR_DELETED)
+ (void) scf_set_error(SCF_ERROR_NOT_FOUND);
return (ret);
}