Actually, looking at the API for the SetCallback method - the retain / release fields are used to manage the lifetime of the info field... Therefore, I suggest making the info field p_host (i.e. an MCStringRef), and then setting retain/release to MCValueRetain / MCValueRelease. This means we don't have to worry about freeing the info data anywhere. It also means t_host_cstring can be auto-managed with an MCAutoPointer.