What I see -
Optimization thoughts -
You check for valid player, then if they are an active traitor. - Does the TTT IsActiveTraitor function not already do the valid player check? If so, seems redundant.
Your using 'think' hook. That's fine when absolutely necessary, but, code must be optimized like crazy. Think is called every frame.
Every frame, you're asking the server to cycle through all players, verify they are traitor, AND if so add a halo.
I've no experience with the halo effect, but, if it will add itself to the player once and stay with them until you tell it otherwise, then don't use think to add it.
Find the hooks/functions, if there are custom ones, where TTT actually updates the player to become 'Traitor' (team change?), THEN add the halo effect (or remove, if left)
And, even less familiar to me, yes, check out the wiki link you provided, and see if you can make glow's 'view' only.
General oddity -
You write GlowT(PLY) - do you ever actually call the function passing it a object(player or otherwise)?
Doesn't seem to be a ply object used in the rest of the function.
Possible crash ??
During your code, you check yourself (local player) to see if you are valid.
THEN, you grab all players, check if they are traitor, then apply the effect.
I get the idea that, pertaining to my original "does IsActiveTraitor check player validity?" question above, the answer is no.
So, I'm thinking it may be crashing, especially during a map change, when the code is trying to apply an effect to a player that just isn't quite valid yet, or if mid game, trying to apply to a player that left/isn't valid but is still queued up in the for loop.