aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/outcome
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-10-18 20:33:03 +0900
committerOphestra <cat@gensokyo.uk>2026-10-18 20:33:37 +0900
commit1a7b909f971dee8c215cf1877cd95a3d690730e1 (patch)
treeef27df23f8fcfb9ff770d69181a76efeb0d8c554 /internal/outcome
parent9eb09ee7556cea7b9c138e4a3bfa1692f95347a5 (diff)
internal/system: file-based big lock
Simultaneous commits or reverts can race if they have overlapping targets. This big lock synchronises entry into the Commit and Revert critical sections across all cmd/hakurei processes. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/outcome')
-rw-r--r--internal/outcome/dispatcher_test.go4
-rw-r--r--internal/outcome/finalise.go2
-rw-r--r--internal/outcome/run_test.go10
-rw-r--r--internal/outcome/spdbus_test.go4
4 files changed, 10 insertions, 10 deletions
diff --git a/internal/outcome/dispatcher_test.go b/internal/outcome/dispatcher_test.go
index 00771e56..3f4732b5 100644
--- a/internal/outcome/dispatcher_test.go
+++ b/internal/outcome/dispatcher_test.go
@@ -209,7 +209,7 @@ func checkOpBehaviour(t *testing.T, testCases []opBehaviourTestCase) {
if err := s.populateLocal(k, k); err != nil {
t.Fatalf("populateLocal: error = %v", err)
}
- stateSys := s.newSys(config, system.New(panicMsgContext{}, k, checkExpectUid))
+ stateSys := s.newSys(config, system.New(panicMsgContext{}, k, checkExpectUid, nil))
if tc.pStateSys != nil {
tc.pStateSys(stateSys)
}
@@ -279,7 +279,7 @@ func checkOpBehaviour(t *testing.T, testCases []opBehaviourTestCase) {
}
}
-func newI() *system.I { return system.New(panicMsgContext{}, panicMsgContext{}, checkExpectUid) }
+func newI() *system.I { return system.New(panicMsgContext{}, panicMsgContext{}, checkExpectUid, nil) }
// simpleTestCase is a simple freeform test case utilising kstub.
type simpleTestCase struct {
diff --git a/internal/outcome/finalise.go b/internal/outcome/finalise.go
index 4049b8d3..7e5faab6 100644
--- a/internal/outcome/finalise.go
+++ b/internal/outcome/finalise.go
@@ -74,7 +74,7 @@ func (k *outcome) finalise(
return err
}
- sys := system.New(k.ctx, msg, s.uid.unwrap())
+ sys := system.New(k.ctx, msg, s.uid.unwrap(), s.sc.SharePath.Append("lock"))
if err := s.newSys(config, sys).toSystem(); err != nil {
return err
}
diff --git a/internal/outcome/run_test.go b/internal/outcome/run_test.go
index 81443c5d..d9a41f53 100644
--- a/internal/outcome/run_test.go
+++ b/internal/outcome/run_test.go
@@ -40,7 +40,7 @@ func TestOutcomeRun(t *testing.T) {
wantSys *system.I
wantParams *container.Params
}{
- {"template", new(stubNixOS), hst.Template(), checkExpectInstanceId, system.New(panicMsgContext{}, message.New(nil), 10009).
+ {"template", new(stubNixOS), hst.Template(), checkExpectInstanceId, system.New(panicMsgContext{}, message.New(nil), 10009, nil).
// spParamsOp
Ensure(m("/tmp/hakurei.0"), 0711, false).
@@ -198,7 +198,7 @@ func TestOutcomeRun(t *testing.T) {
0x96, 0xd7, 0xbc, 0x15,
0xbd, 0x01, 0x78, 0x0e,
0xb9, 0xa6, 0x07, 0xac,
- }, system.New(t.Context(), msg, 10000).
+ }, system.New(t.Context(), msg, 10000, nil).
Ensure(m("/tmp/hakurei.0"), 0711, false).
Ensure(m("/tmp/hakurei.0/runtime"), 0711, false).
Ensure(m("/tmp/hakurei.0/runtime/0"), 0700, true).
@@ -322,7 +322,7 @@ func TestOutcomeRun(t *testing.T) {
0xb1, 0x75, 0x91, 0x17,
0x82, 0xd4, 0x13, 0x36,
0x9b, 0x64, 0xce, 0x7c,
- }, system.New(t.Context(), msg, 10009).
+ }, system.New(t.Context(), msg, 10009, nil).
Ensure(m("/tmp/hakurei.0"), 0711, false).
Ensure(m("/tmp/hakurei.0/runtime"), 0711, false).
Ensure(m("/tmp/hakurei.0/runtime/9"), 0700, true).UpdatePermType(system.User, m("/tmp/hakurei.0/runtime/9"), acl.Read|acl.Write|acl.Execute).
@@ -473,7 +473,7 @@ func TestOutcomeRun(t *testing.T) {
0x66, 0xda, 0xbe, 0x57,
0x4c, 0xf0, 0x73, 0xbd,
0xb4, 0x6e, 0xb5, 0xc1,
- }, system.New(t.Context(), msg, 10001).
+ }, system.New(t.Context(), msg, 10001, nil).
Ensure(m("/tmp/hakurei.0"), 0711, false).
Ensure(m("/tmp/hakurei.0/runtime"), 0711, false).
Ensure(m("/tmp/hakurei.0/runtime/1"), 0700, true).UpdatePermType(system.User, m("/tmp/hakurei.0/runtime/1"), acl.Read|acl.Write|acl.Execute).
@@ -577,7 +577,7 @@ func TestOutcomeRun(t *testing.T) {
t.Fatalf("populateLocal: error = %#v", err)
}
- gotSys = system.New(t.Context(), msg, sPriv.uid.unwrap())
+ gotSys = system.New(t.Context(), msg, sPriv.uid.unwrap(), nil)
if err := sPriv.newSys(tc.config, gotSys).toSystem(); err != nil {
t.Fatalf("toSystem: error = %#v", err)
}
diff --git a/internal/outcome/spdbus_test.go b/internal/outcome/spdbus_test.go
index 4720b5c8..3b9f07f7 100644
--- a/internal/outcome/spdbus_test.go
+++ b/internal/outcome/spdbus_test.go
@@ -80,7 +80,7 @@ func TestSpDBusOp(t *testing.T) {
"--broadcast=org.freedesktop.portal.*=@/org/freedesktop/portal/*",
)}}, nil, nil),
}, func() *system.I {
- sys := system.New(panicMsgContext{}, message.New(nil), checkExpectUid)
+ sys := system.New(panicMsgContext{}, message.New(nil), checkExpectUid, nil)
sys.Ephemeral(system.Process, m(wantInstancePrefix), 0711, false)
if err := sys.ProxyDBus(
dbus.NewConfig(config.ID, true, true), nil,
@@ -162,7 +162,7 @@ func TestSpDBusOp(t *testing.T) {
"--talk=org.freedesktop.UPower",
)}}, nil, nil),
}, func() *system.I {
- sys := system.New(panicMsgContext{}, message.New(nil), checkExpectUid)
+ sys := system.New(panicMsgContext{}, message.New(nil), checkExpectUid, nil)
sys.Ephemeral(system.Process, m(wantInstancePrefix), 0711, false)
if err := sys.ProxyDBus(
config.SessionBus, config.SystemBus,