Skip to content

Conversation

@suo
Copy link
Contributor

@suo suo commented Jun 26, 2025

Stack from ghstack (oldest at bottom):

HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for Allocator2Process messages, and will error out when the channel is closed due to parent process death.

Differential Revision: D77392241

HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for `Allocator2Process` messages, and will error out when the channel is closed due to parent process death.

Differential Revision: [D77392241](https://our.internmc.facebook.com/intern/diff/D77392241/)

[ghstack-poisoned]
suo added a commit that referenced this pull request Jun 26, 2025
HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for `Allocator2Process` messages, and will error out when the channel is closed due to parent process death.

Differential Revision: [D77392241](https://our.internmc.facebook.com/intern/diff/D77392241/)

ghstack-source-id: 292916641
Pull Request resolved: #354
@facebook-github-bot facebook-github-bot added the CLA Signed This label is managed by the Meta Open Source bot. label Jun 26, 2025
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D77392241

HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for `Allocator2Process` messages, and will error out when the channel is closed due to parent process death.

Differential Revision: [D77392241](https://our.internmc.facebook.com/intern/diff/D77392241/)

[ghstack-poisoned]
suo added a commit that referenced this pull request Jun 26, 2025
Pull Request resolved: #354

HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for `Allocator2Process` messages, and will error out when the channel is closed due to parent process death.

Differential Revision: [D77392241](https://our.internmc.facebook.com/intern/diff/D77392241/)
ghstack-source-id: 292917411
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D77392241

HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for `Allocator2Process` messages, and will error out when the channel is closed due to parent process death.

Differential Revision: [D77392241](https://our.internmc.facebook.com/intern/diff/D77392241/)

[ghstack-poisoned]
suo added a commit that referenced this pull request Jun 26, 2025
Pull Request resolved: #354

HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for `Allocator2Process` messages, and will error out when the channel is closed due to parent process death.
ghstack-source-id: 292926774

Differential Revision: [D77392241](https://our.internmc.facebook.com/intern/diff/D77392241/)
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D77392241

HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for `Allocator2Process` messages, and will error out when the channel is closed due to parent process death.

Differential Revision: [D77392241](https://our.internmc.facebook.com/intern/diff/D77392241/)

[ghstack-poisoned]
suo added a commit that referenced this pull request Jun 26, 2025
Pull Request resolved: #354

HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for `Allocator2Process` messages, and will error out when the channel is closed due to parent process death.
ghstack-source-id: 292933296

Differential Revision: [D77392241](https://our.internmc.facebook.com/intern/diff/D77392241/)
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D77392241

HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for `Allocator2Process` messages, and will error out when the channel is closed due to parent process death.

Differential Revision: [D77392241](https://our.internmc.facebook.com/intern/diff/D77392241/)

[ghstack-poisoned]
suo added a commit that referenced this pull request Jun 26, 2025
Pull Request resolved: #354

HYPERACTOR_MANAGED_SUBPROCESS is intended to ensure that child processes are promptly cleaned up after spawning.

It is implemented by setting up a SIGUSR1 handler on child processes, and calling PR_SET_DEATHSIG on parent to have the parent signal the children when it dies.

This can conflict with user signal handlers (for example, checkpointing uses SIGUSR1 to coordinate between the trainer and checkpointing processes).

Better to get rid of it. It's not necessary anymore, as we have a natural cleanup when the parent dies: the child is listening on a channel for `Allocator2Process` messages, and will error out when the channel is closed due to parent process death.
ghstack-source-id: 292980414

Differential Revision: [D77392241](https://our.internmc.facebook.com/intern/diff/D77392241/)
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D77392241

@facebook-github-bot
Copy link
Contributor

This pull request has been merged in 16687f8.

cfsmp3 pushed a commit to cfsmp3/monarch that referenced this pull request Jul 26, 2025
Summary:
## [1.1.10] - 2025-03-03

- Suppress `clippy::elidable_lifetime_names` lint in generated code.

## [1.1.9] - 2025-02-03

- Suppress `clippy::missing_const_for_fn` lint in generated code.

## [1.1.8] - 2025-01-06

- Suppress `unnameable_types`, `clippy::absolute_paths`, `clippy::min_ident_chars`, `clippy::pub_with_shorthand`, `clippy::single_call_fn`, `clippy::single_char_lifetime_names` lints in generated code.

## [1.1.7] - 2024-10-24

- Work around an issue on negative_impls that allows unsound overlapping `Unpin` implementations. ([meta-pytorch#357](taiki-e/pin-project#357))

## [1.1.6] - 2024-10-05

- Suppress `clippy::needless_lifetimes` lint in generated code.

- Disable `derive` feature of `syn` dependency.

## [1.1.5] - 2024-03-05

- Suppress `unused_qualifications` lint in generated code.

## [1.1.4] - 2024-01-25

- Suppress `clippy::missing_docs_in_private_items` and `clippy::missing_inline_in_public_items` lints in generated code. ([meta-pytorch#356](taiki-e/pin-project#356), thanks daxpedda)

## [1.1.3] - 2023-08-06

- Hide documentation of the `Unpin` implementation for `!Unpin` option to work around [rustdoc issue](rust-lang/rust#80481). ([meta-pytorch#355](taiki-e/pin-project#355), thanks matheus-consoli)

## [1.1.2] - 2023-07-02

- Inline project methods.

## [1.1.1] - 2023-06-29

- Fix build error from dependency when built with `-Z minimal-versions`.

## [1.1.0] - 2023-05-13

- Update `syn` dependency to 2. This increase the minimum supported Rust version from Rust 1.37 to Rust 1.56. ([meta-pytorch#352](taiki-e/pin-project#352), [meta-pytorch#354](taiki-e/pin-project#354), thanks maurer and daxpedda)

## [1.0.12] - 2022-08-15

- Suppress `unused_tuple_struct_fields` lint in generated code.

## [1.0.11] - 2022-07-02

- [Suppress `dead_code` lint in generated code.](taiki-e/pin-project#346)

## [1.0.10] - 2021-12-31

- Revert the increase of the minimal version of `syn` that was done in 1.0.9.

## [1.0.9] - 2021-12-26

- [Prevent abuse of private module.](taiki-e/pin-project#336)

- Update minimal version of `syn` to 1.0.84.

## [1.0.8] - 2021-07-21

- [Suppress `clippy::use_self` and `clippy::type_repetition_in_bounds` lints in generated code.](taiki-e/pin-project#331)

## [1.0.7] - 2021-04-16

- [Fix compile error when using `self::` as prefix of path inside `#[pinned_drop]` impl.](taiki-e/pin-project#326)

## [1.0.6] - 2021-03-25

- [Suppress `clippy::semicolon_if_nothing_returned` lint in generated code.](taiki-e/pin-project#318)

## [1.0.5] - 2021-02-03

- [Suppress `deprecated` lint in generated code.](taiki-e/pin-project#313)

## [1.0.4] - 2021-01-09

- [Suppress `clippy::ref_option_ref` lint in generated code.](taiki-e/pin-project#308)

## [1.0.3] - 2021-01-05

- Exclude unneeded files from crates.io.

## [1.0.2] - 2020-11-18

- [Suppress `clippy::unknown_clippy_lints` lint in generated code.](taiki-e/pin-project#303)

## [1.0.1] - 2020-10-15

**Note:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](taiki-e/pin-project@ddcd880).

- [Fix warnings when `#[pin_project]` attribute used within `macro_rules!` macros.](taiki-e/pin-project#298)

## [1.0.0] - 2020-10-13

**Note:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](taiki-e/pin-project@ddcd880).

- [Remove deprecated `#[project]`, `#[project_ref]`, and `#[project_replace]` attributes.](taiki-e/pin-project#265)

  Name the projected type by passing an argument with the same name as the method to the `#[pin_project]` attribute instead:

  ```diff
  - #[pin_project]
  + #[pin_project(project = EnumProj)]
    enum Enum<T> {
        Variant(#[pin] T),
    }

  - #[project]
    fn func<T>(x: Pin<&mut Enum<T>>) {
  -     #[project]
        match x.project() {
  -         Enum::Variant(_) => { /* ... */ }
  +         EnumProj::Variant(_) => { /* ... */ }
        }
    }
  ```

- [Remove deprecated `Replace` argument from `#[pin_project]` attribute.](taiki-e/pin-project#266) Use `project_replace` argument instead.

- [Optimize code generation when used on enums.](taiki-e/pin-project#270)

- [Raise the minimum supported Rust version of this crate from Rust 1.34 to Rust 1.37.](taiki-e/pin-project#292)

- Suppress `explicit_outlives_requirements`, `box_pointers`, `clippy::large_enum_variant`, `clippy::pattern_type_mismatch`, `clippy::implicit_return`, and `clippy::redundant_pub_crate` lints in generated code. ([meta-pytorch#276](taiki-e/pin-project#276), [meta-pytorch#277](taiki-e/pin-project#277), [meta-pytorch#284](taiki-e/pin-project#284))

- Diagnostic improvements.

Changes since the 1.0.0-alpha.1 release:

- [Fix drop order of pinned fields in `project_replace`.](https://github.com/taiki-e/pin-``project/pull/287)

- Update minimal version of `syn` to 1.0.44.

## [1.0.0-alpha.1] - 2020-09-22

- [Remove deprecated `#[project]`, `#[project_ref]`, and `#[project_replace]` attributes.](taiki-e/pin-project#265)

  Name the projected type by passing an argument with the same name as the method to the `#[pin_project]` attribute instead:

  ```diff
  - #[pin_project]
  + #[pin_project(project = EnumProj)]
    enum Enum<T> {
        Variant(#[pin] T),
    }

  - #[project]
    fn func<T>(x: Pin<&mut Enum<T>>) {
  -     #[project]
        match x.project() {
  -         Enum::Variant(_) => { /* ... */ }
  +         EnumProj::Variant(_) => { /* ... */ }
        }
    }
  ```

- [Remove deprecated `Replace` argument from `#[pin_project]` attribute.](taiki-e/pin-project#266) Use `project_replace` argument instead.

- [Optimize code generation when used on enums.](taiki-e/pin-project#270)

- Suppress `explicit_outlives_requirements`, `box_pointers`, `clippy::large_enum_variant`, `clippy::pattern_type_mismatch`, and `clippy::implicit_return` lints in generated code. ([meta-pytorch#276](taiki-e/pin-project#276), [meta-pytorch#277](taiki-e/pin-project#277))

- Diagnostic improvements.

See also [tracking issue for 1.0 release](taiki-e/pin-project#264).

Reviewed By: dtolnay, capickett

Differential Revision: D79015865
facebook-github-bot pushed a commit that referenced this pull request Jul 26, 2025
Summary:
Pull Request resolved: #657

## [1.1.10] - 2025-03-03

- Suppress `clippy::elidable_lifetime_names` lint in generated code.

## [1.1.9] - 2025-02-03

- Suppress `clippy::missing_const_for_fn` lint in generated code.

## [1.1.8] - 2025-01-06

- Suppress `unnameable_types`, `clippy::absolute_paths`, `clippy::min_ident_chars`, `clippy::pub_with_shorthand`, `clippy::single_call_fn`, `clippy::single_char_lifetime_names` lints in generated code.

## [1.1.7] - 2024-10-24

- Work around an issue on negative_impls that allows unsound overlapping `Unpin` implementations. ([#357](taiki-e/pin-project#357))

## [1.1.6] - 2024-10-05

- Suppress `clippy::needless_lifetimes` lint in generated code.

- Disable `derive` feature of `syn` dependency.

## [1.1.5] - 2024-03-05

- Suppress `unused_qualifications` lint in generated code.

## [1.1.4] - 2024-01-25

- Suppress `clippy::missing_docs_in_private_items` and `clippy::missing_inline_in_public_items` lints in generated code. ([#356](taiki-e/pin-project#356), thanks daxpedda)

## [1.1.3] - 2023-08-06

- Hide documentation of the `Unpin` implementation for `!Unpin` option to work around [rustdoc issue](rust-lang/rust#80481). ([#355](taiki-e/pin-project#355), thanks matheus-consoli)

## [1.1.2] - 2023-07-02

- Inline project methods.

## [1.1.1] - 2023-06-29

- Fix build error from dependency when built with `-Z minimal-versions`.

## [1.1.0] - 2023-05-13

- Update `syn` dependency to 2. This increase the minimum supported Rust version from Rust 1.37 to Rust 1.56. ([#352](taiki-e/pin-project#352), [#354](taiki-e/pin-project#354), thanks maurer and daxpedda)

## [1.0.12] - 2022-08-15

- Suppress `unused_tuple_struct_fields` lint in generated code.

## [1.0.11] - 2022-07-02

- [Suppress `dead_code` lint in generated code.](taiki-e/pin-project#346)

## [1.0.10] - 2021-12-31

- Revert the increase of the minimal version of `syn` that was done in 1.0.9.

## [1.0.9] - 2021-12-26

- [Prevent abuse of private module.](taiki-e/pin-project#336)

- Update minimal version of `syn` to 1.0.84.

## [1.0.8] - 2021-07-21

- [Suppress `clippy::use_self` and `clippy::type_repetition_in_bounds` lints in generated code.](taiki-e/pin-project#331)

## [1.0.7] - 2021-04-16

- [Fix compile error when using `self::` as prefix of path inside `#[pinned_drop]` impl.](taiki-e/pin-project#326)

## [1.0.6] - 2021-03-25

- [Suppress `clippy::semicolon_if_nothing_returned` lint in generated code.](taiki-e/pin-project#318)

## [1.0.5] - 2021-02-03

- [Suppress `deprecated` lint in generated code.](taiki-e/pin-project#313)

## [1.0.4] - 2021-01-09

- [Suppress `clippy::ref_option_ref` lint in generated code.](taiki-e/pin-project#308)

## [1.0.3] - 2021-01-05

- Exclude unneeded files from crates.io.

## [1.0.2] - 2020-11-18

- [Suppress `clippy::unknown_clippy_lints` lint in generated code.](taiki-e/pin-project#303)

## [1.0.1] - 2020-10-15

**Note:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](taiki-e/pin-project@ddcd880).

- [Fix warnings when `#[pin_project]` attribute used within `macro_rules!` macros.](taiki-e/pin-project#298)

## [1.0.0] - 2020-10-13

**Note:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](taiki-e/pin-project@ddcd880).

- [Remove deprecated `#[project]`, `#[project_ref]`, and `#[project_replace]` attributes.](taiki-e/pin-project#265)

  Name the projected type by passing an argument with the same name as the method to the `#[pin_project]` attribute instead:

  ```diff
  - #[pin_project]
  + #[pin_project(project = EnumProj)]
    enum Enum<T> {
        Variant(#[pin] T),
    }

  - #[project]
    fn func<T>(x: Pin<&mut Enum<T>>) {
  -     #[project]
        match x.project() {
  -         Enum::Variant(_) => { /* ... */ }
  +         EnumProj::Variant(_) => { /* ... */ }
        }
    }
  ```

- [Remove deprecated `Replace` argument from `#[pin_project]` attribute.](taiki-e/pin-project#266) Use `project_replace` argument instead.

- [Optimize code generation when used on enums.](taiki-e/pin-project#270)

- [Raise the minimum supported Rust version of this crate from Rust 1.34 to Rust 1.37.](taiki-e/pin-project#292)

- Suppress `explicit_outlives_requirements`, `box_pointers`, `clippy::large_enum_variant`, `clippy::pattern_type_mismatch`, `clippy::implicit_return`, and `clippy::redundant_pub_crate` lints in generated code. ([#276](taiki-e/pin-project#276), [#277](taiki-e/pin-project#277), [#284](taiki-e/pin-project#284))

- Diagnostic improvements.

Changes since the 1.0.0-alpha.1 release:

- [Fix drop order of pinned fields in `project_replace`.](https://github.com/taiki-e/pin-``project/pull/287)

- Update minimal version of `syn` to 1.0.44.

## [1.0.0-alpha.1] - 2020-09-22

- [Remove deprecated `#[project]`, `#[project_ref]`, and `#[project_replace]` attributes.](taiki-e/pin-project#265)

  Name the projected type by passing an argument with the same name as the method to the `#[pin_project]` attribute instead:

  ```diff
  - #[pin_project]
  + #[pin_project(project = EnumProj)]
    enum Enum<T> {
        Variant(#[pin] T),
    }

  - #[project]
    fn func<T>(x: Pin<&mut Enum<T>>) {
  -     #[project]
        match x.project() {
  -         Enum::Variant(_) => { /* ... */ }
  +         EnumProj::Variant(_) => { /* ... */ }
        }
    }
  ```

- [Remove deprecated `Replace` argument from `#[pin_project]` attribute.](taiki-e/pin-project#266) Use `project_replace` argument instead.

- [Optimize code generation when used on enums.](taiki-e/pin-project#270)

- Suppress `explicit_outlives_requirements`, `box_pointers`, `clippy::large_enum_variant`, `clippy::pattern_type_mismatch`, and `clippy::implicit_return` lints in generated code. ([#276](taiki-e/pin-project#276), [#277](taiki-e/pin-project#277))

- Diagnostic improvements.

See also [tracking issue for 1.0 release](taiki-e/pin-project#264).

Reviewed By: dtolnay, capickett

Differential Revision: D79015865

fbshipit-source-id: 4712a5147edc00fc3c4cb93febd129b8343c9596
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Meta Open Source bot. fb-exported Merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants