Why is &mut x active through out main, it shouldn't be active after last reference?

60 points elderlado

I am getting borrowing error even though. Why is &mut x active through out main, it shouldn't be active after last reference?

pub fn strtok<'a>(s: &'a mut &'a str, delimiter: char) -> &'a str {
    if let Some(i) = s.find(delimiter) {
        let prefix = &s[..i];
        *s = &s[i + delimiter.len_utf8()..];
        prefix
    } else {
        let prefix = *s;
        *s = "";
        prefix
    }
}

fn main() {
    let mut x = "hello world";
    strtok(&mut x, ' ');
    assert_eq!(x, "world");
}

https://preview.redd.it/hnsz05c78thc1.png?width=1670&format=png&auto=webp&s=e4c57f549b8e2609c1eaf950f274e11d98933100