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(ipc_shared_ptr): prohibit copying without is_created_by_borrow #303

Merged
merged 6 commits into from
Nov 28, 2024

Conversation

atsushi421
Copy link
Contributor

@atsushi421 atsushi421 commented Nov 26, 2024

Description

need_rc_update=false つまり、borrow_loaned_message() で生成された ipc_shared_ptr がコピーされることは想定外の使い方なので、エラーで落とすようにしました。borrow_loaned_message() -> copy*n -> publish()*n という操作を防止することを意図しています。

Related links

実装議論

How was this PR tested?

  • sample application (required)
  • pass unit test

Notes for reviewers

@veqcc
Copy link
Contributor

veqcc commented Nov 26, 2024

borrow_loaned_message() -> copy*n -> publish()*n という操作を防止するために、 bool created_by_borrow というフィールドを追加しました。これにより、borrowとpublishの回数は同じという原則を守るようにしています。

これってそもそも move なのでは...?
そもそも copy をサポートしなければいいのではと思ってしまいますが、それではダメなんでしたっけ

@atsushi421
Copy link
Contributor Author

atsushi421 commented Nov 26, 2024

borrow_loaned_message() -> copy*n -> publish()*n という操作を防止するために、 bool created_by_borrow というフィールドを追加しました。これにより、borrowとpublishの回数は同じという原則を守るようにしています。

これってそもそも move なのでは...? そもそも copy をサポートしなければいいのではと思ってしまいますが、それではダメなんでしたっけ

sub側でのcopyは制限していない (created_by_borrowが動作に影響しない) ので、moveと等価ではないです。
copy assignmentは今回Autoware適用でPrimeSyncronizerのアルゴリズムを維持するために必要になりました。copy constructorは以前から合ったのですが、使われているかは把握してなかったです

@Koichi98
Copy link
Contributor

単なる確認です。
created_by_borrowによって二回以上呼ばれなくなりますが、コピーで作ったものはpublishできない、という実装は特に問題ないのですか?

@atsushi421
Copy link
Contributor Author

単なる確認です。 created_by_borrowによって二回以上呼ばれなくなりますが、コピーで作ったものはpublishできない、という実装は特に問題ないのですか?

石川さんと相談して、Descriptionに書いたような使い方は想定外なので、borrowとpublishの回数が必ず同じになるような実装にしようという話になりました。コピーしてpublishしたいユースケースも思いつかないので、良いのではと思っています。

@atsushi421 atsushi421 requested a review from sykwer November 26, 2024 08:21
@veqcc
Copy link
Contributor

veqcc commented Nov 26, 2024

sub側でのcopyは制限していない (created_by_borrowが動作に影響しない) ので、moveと等価ではないです。
copy assignmentは今回Autoware適用でPrimeSyncronizerのアルゴリズムを維持するために必要になりました。copy constructorは以前から合ったのですが、使われているかは把握してなかったです

たしかに、sub 側はめっちゃコピーされますね。copy 自体禁止にするのは無理そうです。

@atsushi421 atsushi421 changed the title feat(ipc_shared_ptr): copy assignment operator fix(ipc_shared_ptr): prohibit copy without need_rc_update Nov 27, 2024
@atsushi421 atsushi421 requested a review from veqcc November 27, 2024 21:12
@atsushi421
Copy link
Contributor Author

@みなさん
https://tier4.atlassian.net/browse/RT2-2011 がキャンセルになったため、そもそもcopy assignment operatorの実装が不要になりました。ただ、copy constructorは既に存在していて、Descriptionに記載したような使われ方はあり得るので、#303 (comment) の方針に実装修正しました。

veqcc
veqcc previously approved these changes Nov 28, 2024
veqcc
veqcc previously approved these changes Nov 28, 2024
Koichi98
Koichi98 previously approved these changes Nov 28, 2024
@atsushi421 atsushi421 dismissed stale reviews from Koichi98 and veqcc via 53f81c1 November 28, 2024 01:39
@atsushi421
Copy link
Contributor Author

@veqcc @Koichi98
すみません、renameしきれてませんでした 🙇
53f81c1

@atsushi421 atsushi421 added the run-build-test Run build-test in CI label Nov 28, 2024
@atsushi421 atsushi421 changed the title fix(ipc_shared_ptr): prohibit copy without need_rc_update fix(ipc_shared_ptr): prohibit copying without is_created_by_borrow Nov 28, 2024
Copy link

------------------------------------------------------------------------------
                           GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File                                       Lines    Exec  Cover   Missing
------------------------------------------------------------------------------
build/agnocastlib/_deps/gmock-global-src/include/gmock-global/gmock-global.h
                                               4       4   100%   
src/agnocastlib/include/agnocast.hpp           2       2   100%   
src/agnocastlib/include/agnocast_executor.hpp
                                               1       0     0%   38
src/agnocastlib/include/agnocast_publisher.hpp
                                              24      19    79%   68-69,78-80
src/agnocastlib/include/agnocast_smart_pointer.hpp
                                              53      50    94%   77,80-81
src/agnocastlib/include/agnocast_topic_info.hpp
                                              13      13   100%   
src/agnocastlib/src/agnocast.cpp              81      15    18%   22,24,27,30,32-34,36,39,42,44-49,53-54,57-61,65-66,70-73,76,79,81-84,87,90,92-93,95-96,101,103-105,108-111,114,116-122,124,137-138,149-150,153-155,160
src/agnocastlib/src/agnocast_component_container.cpp
                                               8       0     0%   5,7,9-10,12-13,15-16
src/agnocastlib/src/agnocast_component_container_mt.cpp
                                              27       0     0%   7,9,11-15,18,20-21,24-25,28-29,32-34,37-39,43-44,46-48,50-51
src/agnocastlib/src/agnocast_executor.cpp
                                              86       0     0%   10,12,14-16,18-20,24,26,29,31-32,35-39,42-45,47-48,51-53,55-58,61-62,67,70,73,75-79,82,86-87,90-91,94,96-100,103,106,109-114,117,120-123,125-128,131,134-136,139,141,144,148-149,152-155,158,161,163-164
src/agnocastlib/src/agnocast_multi_threaded_executor.cpp
                                              49       0     0%   9,13,15-16,18-19,24-25,28-32,35,37-40,43,47,50,52-54,57-59,63,65-66,70,73,76,78-79,81-82,86-87,90,95,99,102-103,106,113-115,118
src/agnocastlib/src/agnocast_publisher.cpp
                                              73       0     0%   5,7,9-15,19-20,27,32,34-39,42-49,54,58-65,68-69,71-74,76-79,81,84-85,89-90,96,100-109,112-113,116,119,121-126,129
src/agnocastlib/src/agnocast_single_threaded_executor.cpp
                                              18       0     0%   10-12,16,18-21,24,28-30,33,35-36,39-41
src/agnocastlib/src/agnocast_smart_pointer.cpp
                                              20       0     0%   5,7-15,19,21-29
src/agnocastlib/src/agnocast_subscription.cpp
                                              87       9    10%   10-12,14,17,21,24-26,28,30,32,34-38,40-44,46,49-56,59-62,64,66,69,72,76-79,81-87,90-91,98,103,105-108,111,114,118-123,125-129,131,133,136,140-141,143-144
src/agnocastlib/src/agnocast_topic_info.cpp
                                              16       0     0%   12,16-17,20-24,28-31,34-37
src/agnocastlib/src/agnocast_utils.cpp        23      21    91%   46,48
src/agnocastlib/test/test_agnocast_publisher.cpp
                                              41      41   100%   
src/agnocastlib/test/test_agnocast_smart_pointer.cpp
                                              96      96   100%   
src/agnocastlib/test/test_agnocast_subscription.cpp
                                              23      23   100%   
src/agnocastlib/test/test_agnocast_topic_info.cpp
                                              21      20    95%   33
src/agnocastlib/test/test_agnocast_utils.cpp
                                              32      32   100%   
------------------------------------------------------------------------------
TOTAL                                        798     345    43%
------------------------------------------------------------------------------

@atsushi421 atsushi421 requested review from Koichi98 and veqcc November 28, 2024 08:41
@atsushi421 atsushi421 merged commit 504436d into main Nov 28, 2024
4 checks passed
@atsushi421 atsushi421 deleted the restore_copy_assignment branch November 28, 2024 18:14
@sykwer
Copy link
Member

sykwer commented Nov 29, 2024

みなさんGod Jobです!
ところで今度moveの完全理解講座をしましょう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
run-build-test Run build-test in CI
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants