fix "if (p) free(p)" constructs