+/*
+ * Destroy a buffer registry map with the given domain.
+ */
+void buffer_reg_map_destroy(struct buffer_reg_map *regp,
+ enum lttng_domain_type domain)
+{
+ if (!regp) {
+ return;
+ }
+
+ DBG3("Buffer registry map destroy with key %" PRIu32, regp->key);
+
+ switch (domain) {
+ case LTTNG_DOMAIN_UST:
+ {
+ int ret;
+ struct buffer_reg_map_counter *map_counter_reg, *tmp;
+ /* Wipe counter */
+ cds_list_for_each_entry_safe(map_counter_reg, tmp, ®p->counters, lnode) {
+ cds_list_del(&map_counter_reg->lnode);
+ regp->counter_count--;
+ buffer_reg_map_counter_destroy(map_counter_reg, domain);
+ }
+
+ if (regp->obj.ust) {
+ ret = ust_app_release_object(NULL, regp->obj.ust);
+ if (ret < 0 && ret != -EPIPE && ret != -LTTNG_UST_ERR_EXITING) {
+ ERR("Buffer reg map release obj handle %d failed with ret %d",
+ regp->obj.ust->handle, ret);
+ }
+ free(regp->obj.ust);
+ }
+ lttng_fd_put(LTTNG_FD_APPS, 1);
+ break;
+ }
+ default:
+ assert(0);
+ }
+
+ free(regp);
+ return;
+}
+