mirror of
https://github.com/systemd/systemd.git
synced 2025-01-26 14:04:03 +03:00
core: treat JobTimeout=0 as equivalent to JobTimeout=infinity
Corrects an incompatibility introduced with 36c16a7cdd6c33d7980efc2cd6a2211941f302b4. Fixes: #2537
This commit is contained in:
parent
aad41f0814
commit
89beff89ed
@ -728,20 +728,14 @@
|
||||
<term><varname>JobTimeoutAction=</varname></term>
|
||||
<term><varname>JobTimeoutRebootArgument=</varname></term>
|
||||
|
||||
<listitem><para>When a job for this unit is queued, a time-out
|
||||
may be configured. If this time limit is reached, the job will
|
||||
be cancelled, the unit however will not change state or even
|
||||
enter the <literal>failed</literal> mode. This value defaults
|
||||
to 0 (job timeouts disabled), except for device units. NB:
|
||||
this timeout is independent from any unit-specific timeout
|
||||
(for example, the timeout set with
|
||||
<varname>TimeoutStartSec=</varname> in service units) as the
|
||||
job timeout has no effect on the unit itself, only on the job
|
||||
that might be pending for it. Or in other words: unit-specific
|
||||
timeouts are useful to abort unit state changes, and revert
|
||||
them. The job timeout set with this option however is useful
|
||||
to abort only the job waiting for the unit state to
|
||||
change.</para>
|
||||
<listitem><para>When a job for this unit is queued, a time-out may be configured. If this time limit is
|
||||
reached, the job will be cancelled, the unit however will not change state or even enter the
|
||||
<literal>failed</literal> mode. This value defaults to <literal>infinity</literal> (job timeouts disabled),
|
||||
except for device units. NB: this timeout is independent from any unit-specific timeout (for example, the
|
||||
timeout set with <varname>TimeoutStartSec=</varname> in service units) as the job timeout has no effect on the
|
||||
unit itself, only on the job that might be pending for it. Or in other words: unit-specific timeouts are useful
|
||||
to abort unit state changes, and revert them. The job timeout set with this option however is useful to abort
|
||||
only the job waiting for the unit state to change.</para>
|
||||
|
||||
<para><varname>JobTimeoutAction=</varname>
|
||||
optionally configures an additional
|
||||
|
@ -161,7 +161,7 @@ Unit.OnFailureJobMode, config_parse_job_mode, 0,
|
||||
Unit.OnFailureIsolate, config_parse_job_mode_isolate, 0, offsetof(Unit, on_failure_job_mode)
|
||||
Unit.IgnoreOnIsolate, config_parse_bool, 0, offsetof(Unit, ignore_on_isolate)
|
||||
Unit.IgnoreOnSnapshot, config_parse_warn_compat, DISABLED_LEGACY, 0
|
||||
Unit.JobTimeoutSec, config_parse_sec, 0, offsetof(Unit, job_timeout)
|
||||
Unit.JobTimeoutSec, config_parse_sec_fix_0, 0, offsetof(Unit, job_timeout)
|
||||
Unit.JobTimeoutAction, config_parse_failure_action, 0, offsetof(Unit, job_timeout_action)
|
||||
Unit.JobTimeoutRebootArgument, config_parse_string, 0, offsetof(Unit, job_timeout_reboot_arg)
|
||||
Unit.StartLimitInterval, config_parse_sec, 0, offsetof(Unit, start_limit.interval)
|
||||
|
@ -1757,6 +1757,42 @@ int config_parse_service_timeout(
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_sec_fix_0(
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
usec_t *usec = data;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(usec);
|
||||
|
||||
/* This is pretty much like config_parse_sec(), except that this treats a time of 0 as infinity, for
|
||||
* compatibility with older versions of systemd where 0 instead of infinity was used as indicator to turn off a
|
||||
* timeout. */
|
||||
|
||||
r = parse_sec(rvalue, usec);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse %s= parameter, ignoring: %s", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (*usec <= 0)
|
||||
*usec = USEC_INFINITY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_busname_service(
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
|
@ -109,6 +109,7 @@ int config_parse_bus_name(const char* unit, const char *filename, unsigned line,
|
||||
int config_parse_exec_utmp_mode(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_working_directory(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_fdname(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_sec_fix_0(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* gperf prototypes */
|
||||
const struct ConfigPerfItem* load_fragment_gperf_lookup(const char *key, unsigned length);
|
||||
|
Loading…
x
Reference in New Issue
Block a user