summaryrefslogtreecommitdiffstats
path: root/ahl-binding
diff options
context:
space:
mode:
Diffstat (limited to 'ahl-binding')
-rw-r--r--ahl-binding/interrupt.cpp14
-rw-r--r--ahl-binding/role.cpp26
2 files changed, 18 insertions, 22 deletions
diff --git a/ahl-binding/interrupt.cpp b/ahl-binding/interrupt.cpp
index b0eebec..5bf0b79 100644
--- a/ahl-binding/interrupt.cpp
+++ b/ahl-binding/interrupt.cpp
@@ -72,17 +72,13 @@ int interrupt_t::apply(afb_req_t req, const role_t& role)
afb_req_fail(req, "Failed to call 'ramp' action on stream", nullptr);
return -1;
}
- json_object* response = nullptr;
json_object* jvolold = nullptr;
- if (json_object_object_get_ex(result, "response", &response))
+ if (json_object_object_get_ex(result, "volold", &jvolold))
{
- if (json_object_object_get_ex(response, "volold", &jvolold))
- {
- applied_on_.push_back(std::make_tuple<std::string, int>(r.uid(), json_object_get_int(jvolold)));
- AFB_API_DEBUG(ahl_binding_t::instance().handle(),
- "POLICY: Applying a ramp to '%s' stream because '%s' is opened and have higher priority!",
- r.stream().c_str(), role.stream().c_str());
- }
+ applied_on_.push_back(std::make_tuple<std::string, int>(r.uid(), json_object_get_int(jvolold)));
+ AFB_API_DEBUG(ahl_binding_t::instance().handle(),
+ "POLICY: Applying a ramp to '%s' stream because '%s' is opened and have higher priority!",
+ r.stream().c_str(), role.stream().c_str());
}
}
}
diff --git a/ahl-binding/role.cpp b/ahl-binding/role.cpp
index 7d35889..3a4dd0e 100644
--- a/ahl-binding/role.cpp
+++ b/ahl-binding/role.cpp
@@ -160,22 +160,20 @@ void role_t::open(afb_req_t r, json_object* o)
if (!apply_policy(r))
{
- afb_req_context_set(
- r,
- this,
- [](void* arg)
- {
- role_t * role = (role_t*) arg;
-
- if (role->opened_)
+ afb_req_context(r,
+ 0, // Do not replace previous context if any
+ [](void* arg) -> void* { return new session_t(); },
+ [](void* arg) {
+ afb_api_t api = ahl_binding_t::instance().handle();
+ session_t* opened_roles = reinterpret_cast<session_t*>(arg);
+ for(role_t* role : *opened_roles)
{
- afb_api_t api = ahl_binding_t::instance().handle();
-
AFB_API_DEBUG(api, "Released role %s\n", role->uid_.c_str());
role->opened_ = false;
+ if(role->interrupts_.size()) role->interrupts_[0].clear();
// send a mute command to the HAL. We cannot reuse the do_mute function,
- // because in the context here, the afb_req_t is no longer valid.
+ // because in the context here, the afb_request is no longer valid.
json_object* a = json_object_new_object();
json_object_object_add(a, "mute", json_object_new_boolean(true));
@@ -187,14 +185,16 @@ void role_t::open(afb_req_t r, json_object* o)
NULL,
NULL);
}
- }
+ delete opened_roles;
+ },
+ nullptr
);
opened_ = true;
// Add the current role to the session
session_t* context = reinterpret_cast<session_t*>(afb_req_context_get(r));
- context->push_back(this);
+ if(context) context->push_back(this);
json_object* result = json_object_new_object();
json_object_object_add(result, "device_uri", json_object_new_string(device_uri_.c_str()));