=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server.c,v retrieving revision 1.53 retrieving revision 1.54 diff -c -r1.53 -r1.54 *** src/usr.bin/tmux/server.c 2009/10/11 07:20:16 1.53 --- src/usr.bin/tmux/server.c 2009/10/11 08:58:05 1.54 *************** *** 1,4 **** ! /* $OpenBSD: server.c,v 1.53 2009/10/11 07:20:16 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: server.c,v 1.54 2009/10/11 08:58:05 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 810,822 **** server_check_jobs(void) { struct job *job; ! SLIST_FOREACH(job, &all_jobs, lentry) { if (job->flags & JOB_DONE || job->fd != -1 || job->pid != -1) continue; - if (job->callbackfn != NULL) - job->callbackfn(job); job->flags |= JOB_DONE; } } --- 810,826 ---- server_check_jobs(void) { struct job *job; ! ! restart: SLIST_FOREACH(job, &all_jobs, lentry) { if (job->flags & JOB_DONE || job->fd != -1 || job->pid != -1) continue; job->flags |= JOB_DONE; + + if (job->callbackfn != NULL) { + job->callbackfn(job); + goto restart; /* could be freed by callback */ + } } }