+ /*
+ * The callback pointers in the producer are invalid in the
+ * consumer. We need to look them up here.
+ */
+ config = &handle->shadow_chan->backend.config;
+ switch (config->client_type) {
+ case LTTNG_CLIENT_METADATA:
+ memcpy(&config->cb, lttng_client_callbacks_metadata,
+ sizeof(config->cb));
+ break;
+ case LTTNG_CLIENT_DISCARD:
+ memcpy(&config->cb, lttng_client_callbacks_discard,
+ sizeof(config->cb));
+ break;
+ case LTTNG_CLIENT_OVERWRITE:
+ memcpy(&config->cb, lttng_client_callbacks_overwrite,
+ sizeof(config->cb));
+ break;
+ default:
+ ERR("Unknown client type %d", config->client_type);
+ channel_destroy(chan, handle, 1);
+ return NULL;
+ }
+ /* Replace the object table pointer. */
+ ret = munmap(handle->table->objects[0].memory_map,
+ handle->table->objects[0].memory_map_size);
+ if (ret) {
+ perror("munmap");
+ assert(0);
+ }
+ handle->table->objects[0].memory_map = (char *) handle->shadow_chan;
+ handle->table->objects[0].is_shadow = 1;