mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 00:32:25 -04:00
Fix up the order in which jail creation processes are run, to preserve
the config file's order in the non-parallel-start case. PR: 209112 MFC after: 3 days
This commit is contained in:
parent
e25520bab3
commit
4c86c0fa98
3 changed files with 23 additions and 6 deletions
|
|
@ -92,9 +92,13 @@ next_command(struct cfjail *j)
|
|||
int create_failed, stopping;
|
||||
|
||||
if (paralimit == 0) {
|
||||
requeue(j, &runnable);
|
||||
if (j->flags & JF_FROM_RUNQ)
|
||||
requeue_head(j, &runnable);
|
||||
else
|
||||
requeue(j, &runnable);
|
||||
return 1;
|
||||
}
|
||||
j->flags &= ~JF_FROM_RUNQ;
|
||||
create_failed = (j->flags & (JF_STOP | JF_FAILED)) == JF_FAILED;
|
||||
stopping = (j->flags & JF_STOP) != 0;
|
||||
comparam = *j->comparam;
|
||||
|
|
@ -160,20 +164,23 @@ next_command(struct cfjail *j)
|
|||
int
|
||||
finish_command(struct cfjail *j)
|
||||
{
|
||||
struct cfjail *rj;
|
||||
int error;
|
||||
|
||||
if (!(j->flags & JF_SLEEPQ))
|
||||
return 0;
|
||||
j->flags &= ~JF_SLEEPQ;
|
||||
if (*j->comparam == IP_STOP_TIMEOUT)
|
||||
{
|
||||
if (*j->comparam == IP_STOP_TIMEOUT) {
|
||||
j->flags &= ~JF_TIMEOUT;
|
||||
j->pstatus = 0;
|
||||
return 0;
|
||||
}
|
||||
paralimit++;
|
||||
if (!TAILQ_EMPTY(&runnable))
|
||||
requeue(TAILQ_FIRST(&runnable), &ready);
|
||||
if (!TAILQ_EMPTY(&runnable)) {
|
||||
rj = TAILQ_FIRST(&runnable);
|
||||
rj->flags |= JF_FROM_RUNQ;
|
||||
requeue(rj, &ready);
|
||||
}
|
||||
error = 0;
|
||||
if (j->flags & JF_TIMEOUT) {
|
||||
j->flags &= ~JF_TIMEOUT;
|
||||
|
|
@ -259,7 +266,7 @@ next_proc(int nonblock)
|
|||
}
|
||||
|
||||
/*
|
||||
* Run a single command for a jail, possible inside the jail.
|
||||
* Run a single command for a jail, possibly inside the jail.
|
||||
*/
|
||||
static int
|
||||
run_command(struct cfjail *j)
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@
|
|||
#define JF_PERSIST 0x0100 /* Jail is temporarily persistent */
|
||||
#define JF_TIMEOUT 0x0200 /* A command (or process kill) timed out */
|
||||
#define JF_SLEEPQ 0x0400 /* Waiting on a command and/or timeout */
|
||||
#define JF_FROM_RUNQ 0x0800 /* Has already been on the run queue */
|
||||
|
||||
#define JF_OP_MASK (JF_START | JF_SET | JF_STOP)
|
||||
#define JF_RESTART (JF_START | JF_STOP)
|
||||
|
|
@ -223,6 +224,7 @@ extern struct cfjail *next_jail(void);
|
|||
extern int start_state(const char *target, int docf, unsigned state,
|
||||
int running);
|
||||
extern void requeue(struct cfjail *j, struct cfjails *queue);
|
||||
extern void requeue_head(struct cfjail *j, struct cfjails *queue);
|
||||
|
||||
extern void yyerror(const char *);
|
||||
extern int yylex(void);
|
||||
|
|
|
|||
|
|
@ -397,6 +397,14 @@ requeue(struct cfjail *j, struct cfjails *queue)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
requeue_head(struct cfjail *j, struct cfjails *queue)
|
||||
{
|
||||
TAILQ_REMOVE(j->queue, j, tq);
|
||||
TAILQ_INSERT_HEAD(queue, j, tq);
|
||||
j->queue = queue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add a dependency edge between two jails.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue