My guess is that you have FL_MONSTER flag set but no th_run. When you shoot the barnacle, T_Damage is called. Near the bottom of that function, it calls FoundTarget() if the target is FL_MONSTER. FoundTarget calls HuntTarget, which sets self.think to self.th_run.
You should remove the FL_MONSTER flag, or else add an extra check to return from that code path if classname is "barnacle". (IIRC you might want to keep FL_MONSTER for other reasons, for example the enlarged bbox for opposing traces?)
Or you could add a th_pain, since self.th_pain (if it isn't null) is called after FoundTarget. But your previous think function would still be getting overridden, which might mess up your specialized monster behaviour.