Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix an issue when we want to transfer a task to dom0 when dom0 is busy with infinite tasks #48

Merged
merged 1 commit into from
Dec 1, 2024

Conversation

dinosaure
Copy link
Contributor

This error occurs when we take the opportunity not to return to our worker (and use the system mutex) and continue to execute our tasks. For [dom0], an additional check is required to ensure that no domain wishes to send us a task. Adding this check fixes the problem. A test was added accordingly.

…y with infinite tasks

This error occurs when we take the opportunity not to return to our
worker (and use the system mutex) and continue to execute our tasks. For
[dom0], an additional check is required to ensure that no domain wishes to
send us a task. Adding this check fixes the problem. A test was added
accordingly.
@dinosaure dinosaure merged commit 2e82a64 into main Dec 1, 2024
1 check failed
@dinosaure dinosaure deleted the dom0 branch December 1, 2024 09:55
dinosaure added a commit to dinosaure/opam-repository that referenced this pull request Jan 13, 2025
CHANGES:

- Notice the domain if it needs to look into the shared heap if a task is ready
  to be transfered (@dinosaure, robur-coop/miou#41)
- Don't use `Option.value` but `match .. with` to calculate the optional length
  for `Miou_unix.{read,write}` (@kit-ty-kate, robur-coop/miou#44)
- Use `List.iter` instead of `Hashtbl.iter` for internal kept file-descriptors
  of `Miou_unix` (@dinosaure, robur-coop/miou#45)
- Improve the documentation of `Miou_unix` about suspended syscalls (@dinosaure,
  @kit-ty-kate, robur-coop/miou#43)
- Export `reraise` (@dinosaure, robur-coop/miou#46)
- Fix an issue on the `dom0` and observe if some tasks must be transfered to it
  (@dinosaure, robur-coop/miou#48)
- Fix documentation (@mbarbin, robur-coop/miou#47)
- Fix the formatter (@mbarbin, robur-coop/miou#51)
- Upgrade miou to `ocamlformat.0.27.0` (@mbarbin, robur-coop/miou#52)
- Add `x-maintenance-intent` (@hannesm, robur-coop/miou#56)
- Improve the documentation and some `odoc` warnings (@mbarbin, robur-coop/miou#53, robur-coop/miou#54)
davesnx pushed a commit to davesnx/opam-repository that referenced this pull request Mar 12, 2025
CHANGES:

- Don't try to abusively fill the pipe to interrupt a domain

  Interrupting a domain involves writing to a pipe to interrupt the `select(2)`
  if it is running. The pipe has a limited memory, depending on the system, and
  if you ask to interrupt a domain too much, you end up blocking the `write`.
  This patch prevents writing to the pipe if it has not yet been read.

  (@dinosaure, robur-coop/miou#46)

- Expose the Sequence module
  (@dinosaure, robur-coop/miou#47)
- Be able to add a hook (effect free) into the scheduler

  It is possible to add a hook to the scheduler. If the user wants to execute a
  function to a domain each time the domain is busy with a task, they can do so.
  However, the effects are not managed in the passed function.

  (@dinosaure, robur-coop/miou#48)

- Add `Miou.Lazy`, a domain-safe `Lazy` module like `Stdlib.Lazy`
  (@dinosaure, initially implemented by @polytypic, robur-coop/miou#49)
- Raise an exception if the user uses syscalls (from `Miou_unix`) and `Miou.run`
  instead of `Miou_unix.run`

  If a user uses a suspend function offered by `Miou_unix` but does not use
  `Miou_unix.run`, the programme may block indefinitely. This patch prevents
  such an error by raising an exception if we want to add a suspension point and
  we haven't specified how to handle it (if we use `Miou.run` instead of
  `Miou_unix.run`).

  (@dinosaure, reported by @kit-ty-kate, robur-coop/miou#51)

- Rename `Miou.set_signal` to `Miou.sys_signal`
  (@dinosaure, robur-coop/miou#50)

- Improve `Miou_unix.{read,write}`
  (@kit-ty-kate, @dinosaure, robur-coop/miou#52, 2f552a6, robur-coop/miou#54)
- Fix an issue related to the dom0 and pending tasks locked by mutexes

  Tasks may have been transmitted to dom0 while it was executing a task and
  before the `select(2)`. This patch resynchronises the pending tasks in dom0's
  TODO-list before making the `select(2)`: specifically to find out whether the
  `select(2)` can block indefinitely or not. This patch also cleans up the old
  states of the tables used by `Miou_unix` if it is used on an ongoing basis (as
  in the case of tests).

  (@dinosaure, robur-coop/miou#53)

- Add `Miou.Domain.available`
  (@dinosaure, robur-coop/miou#53)
- Fix a race condition (observed with TSan) when we wait the cancellation of a
  children

  This patch changes Miou's behaviour a little when waiting for a task to be
  cancelled and prevents invalid access to a value that does not belong to the
  current domain (and which can be modified by another domain). Thanks
  @OlivierNicole and @fabbing for their advice on using TSan.

  (@dinosaure, robur-coop/miou#56)

- Update the layout of Miou to avoid conflicts with other packages (like `backoff`)
  (@dinosaure, reported by @patricoferris, robur-coop/miou#57)
- OCaml 5.3 support
  (@kit-ty-kate, github#22)
- Rename `Miou.call_cc` to `Miou.async`
  (@dinosaure, @kit-ty-kate, @Armael, github#23)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

1 participant