this protection seems a little odd, if something passes the same pointer to something twice then they probably own it, and in that case we'll eventually cause a double free the next time somebody calls SetData with a different value.

(note that I'm only looking at this function in isolation here)