    #[frb(sync)]
    pub fn {{ config_name }}(&mut self{{ method_params }}) -> &mut Self {
        let mut guard = self.inner.blocking_lock();
        // Take-modify-replace: works for both consume-self builders (returning
        // `Self`) and `&mut self` builders (returning `&mut Self`). For the
        // mutate-in-place case the mutated value is the same `inner` we put back;
        // for the consuming case the new value is the configurator's return.
        if let Some(inner) = guard.take() {
{%- if is_owned %}
            *guard = Some(inner.{{ config_name }}(
{%- for param in configurator_params %}
                {{ param.name }}{% if param.is_opaque %}.inner{% elif param.is_named %}.into(){% endif %},
{%- endfor %}
            ));
{%- else %}
            let mut inner = inner;
            inner.{{ config_name }}(
{%- for param in configurator_params %}
                {{ param.name }}{% if param.is_opaque %}.inner{% elif param.is_named %}.into(){% endif %},
{%- endfor %}
            );
            *guard = Some(inner);
{%- endif %}
        }
        drop(guard);
        self
    }
