core: fix unit_merge() load state check evaluating after state overwrite
The condition on line 1206 checks other->load_state != UNIT_STUB to decide whether to call the vtable done() callback, but the state was already overwritten to UNIT_MERGED on line 1198, making the condition always true. Save the original load_state before overwriting it, so that units in UNIT_STUB state (which never went through a load attempt) correctly skip the done() call. Signed-off-by: dongshengyuan <dongshengyuan@uniontech.com> Co-developed-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
committed by
Luca Boccassi
parent
a77838a950
commit
98cae7a125
+3
-1
@@ -1195,6 +1195,8 @@ int unit_merge(Unit *u, Unit *other) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
UnitLoadState saved_load_state = other->load_state;
|
||||
|
||||
other->load_state = UNIT_MERGED;
|
||||
other->merged_into = u;
|
||||
|
||||
@@ -1203,7 +1205,7 @@ int unit_merge(Unit *u, Unit *other) {
|
||||
|
||||
/* If there is still some data attached to the other node, we
|
||||
* don't need it anymore, and can free it. */
|
||||
if (other->load_state != UNIT_STUB)
|
||||
if (saved_load_state != UNIT_STUB)
|
||||
if (UNIT_VTABLE(other)->done)
|
||||
UNIT_VTABLE(other)->done(other);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user