- 
    
Improvement
 - 
    Resolution: Fixed
 - 
    
Minor
 - 
    None
 
I saw it before, but seems JENKINS-29792 exposed it more obviously.
1) Trigger has no synchronisation for calling run/stop after start() that initialises 'job' variable or any other plugin specified fields that can be used in run/stop
2) Seems UI config submit always calls stop() even if trigger wasn't start, so either some API handlers/checks should exist, either stop/run must do null check and simply skip execution.
- is related to
 - 
                    
JENKINS-29876 NPE when triggering downstream job
-         
 - Resolved
 
 -         
 - 
                    
JENKINS-29792 Don't run trigger for disabled/copied projects
-         
 - Closed
 
 -         
 - 
                    
JENKINS-29698 NullPointerException and threads blocked in the JVM with the Gitlab Merge Requests Builder plugin
-         
 - Reopened
 
 -         
 - 
                    
JENKINS-29787 NPE on stop in GitHubPushTrigger
-         
 - Resolved
 
 -         
 - 
                    
JENKINS-29790 NPE in TimerTrigger after enabling a job previously in disabled state
-         
 - Resolved
 
 -         
 - 
                    
JENKINS-30145 NPE on rendering a job page that uses MultipleSCM for "Polling Log" action
-         
 - Resolved
 
 -