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

SystemLayerImplSelect: make safe with unbalanced Request/ClearCallback #21349

Conversation

plan44
Copy link
Contributor

@plan44 plan44 commented Jul 28, 2022

This is an inproved version of #21135

Problem

Original version (3ca630c) could cause non balanced dispatch_suspend/dispatch_resume which is not allowed by the dispatch API, as pointed out in #pullrequestreview-1051517126.

Change overview

This version does not use dispatch_suspend/resume any more to prevent the problem, additionally making the implementation behaving as similar as possible as, and compatible with, the select() based fallback.

The fallback is required by some tests even on dispatch based platforms, when no dispatch queue can be started.

But for real applications on dispatch based platforms, there should always be a dispatch queue, so the implementation now issues a warning when RequestCallbackOnPendingXXX is called without a dispatch queue available.

Testing

  • functionality is covered by existing network test, which all pass (tested on Darwin)

…Callback

Original version (3ca630c) could cause non balanced dispatch_suspend/dispatch_resume which is not allowed by the dispatch API, as pointed out in #pullrequestreview-1051517126.

This version does not use dispatch_suspend/resume any more to prevent the problem, additionally making the implementation behaving as similar as possible as, and compatible with, the select() based fallback.

The fallback is required by some tests even on dispatch based platforms, when no dispatch queue can be started.

But for real applications on dispatch based platforms, there should always be a dispatch queue, so the implementation now issues a warning when RequestCallbackOnPendingXXX is called without a dispatch queue available.
@github-actions
Copy link

github-actions bot commented Jul 28, 2022

PR #21349: Size comparison from 8fe4727 to 7c9728e

Increases (3 builds for cc13x2_26x2, telink)
platform target config section 8fe4727 7c9728e change % change
cc13x2_26x2 all-clusters-app LP_CC2652R7 (read only) 668291 668299 8 0.0
.text 579780 579788 8 0.0
pump-controller-app LP_CC2652R7 (read only) 666479 666487 8 0.0
.text 581320 581328 8 0.0
telink light-switch-app tlsr9518adk80d text 567238 567240 2 0.0
Decreases (5 builds for bl602, cc13x2_26x2, esp32, nrfconnect)
platform target config section 8fe4727 7c9728e change % change
bl602 lighting-app bl602 .text 1051628 1051624 -4 -0.0
cc13x2_26x2 all-clusters-app LP_CC2652R7 (read/write) 183076 183068 -8 -0.0
pump-controller-app LP_CC2652R7 (read/write) 176048 176040 -8 -0.0
esp32 all-clusters-app c3devkit (read only) 1022462 1022458 -4 -0.0
.flash.text 1022462 1022458 -4 -0.0
nrfconnect all-clusters-minimal-app nrf52840dk_nrf52840 text 798120 798116 -4 -0.0
Full report (43 builds for bl602, cc13x2_26x2, cyw30739, efr32, esp32, k32w, linux, mbed, nrfconnect, p6, telink)
platform target config section 8fe4727 7c9728e change % change
bl602 lighting-app bl602 (read/write) 1381330 1381330 0 0.0
.bss 117618 117618 0 0.0
.data 4480 4480 0 0.0
.text 1051628 1051624 -4 -0.0
bl602+rpc (read/write) 1426746 1426746 0 0.0
.bss 125058 125058 0 0.0
.data 4600 4600 0 0.0
.text 1083292 1083292 0 0.0
cc13x2_26x2 all-clusters-app LP_CC2652R7 (read only) 668291 668299 8 0.0
(read/write) 183076 183068 -8 -0.0
.bss 74260 74260 0 0.0
.data 3356 3356 0 0.0
.rodata 88195 88195 0 0.0
.text 579780 579788 8 0.0
all-clusters-minimal-app LP_CC2652R7 (read only) 633875 633875 0 0.0
(read/write) 157828 157828 0 0.0
.bss 73556 73556 0 0.0
.data 3356 3356 0 0.0
.rodata 77411 77411 0 0.0
.text 556140 556140 0 0.0
lock-ftd LP_CC2652R7 (read only) 671455 671455 0 0.0
(read/write) 170104 170104 0 0.0
.bss 71340 71340 0 0.0
.data 3280 3280 0 0.0
.rodata 76263 76263 0 0.0
.text 594712 594712 0 0.0
lock-mtd LP_CC2652R7 (read only) 653555 653555 0 0.0
(read/write) 183692 183692 0 0.0
.bss 67028 67028 0 0.0
.data 3280 3280 0 0.0
.rodata 100875 100875 0 0.0
.text 552200 552200 0 0.0
pump-app LP_CC2652R7 (read only) 680743 680743 0 0.0
(read/write) 161648 161648 0 0.0
.bss 71404 71404 0 0.0
.data 3280 3280 0 0.0
.rodata 88863 88863 0 0.0
.text 591396 591396 0 0.0
pump-controller-app LP_CC2652R7 (read only) 666479 666487 8 0.0
(read/write) 176048 176040 -8 -0.0
.bss 71540 71540 0 0.0
.data 3276 3276 0 0.0
.rodata 84679 84679 0 0.0
.text 581320 581328 8 0.0
shell LP_CC2652R7 (read only) 661006 661006 0 0.0
(read/write) 185880 185880 0 0.0
.bss 76580 76580 0 0.0
.data 3360 3360 0 0.0
.rodata 85166 85166 0 0.0
.text 575524 575524 0 0.0
cyw30739 light cyw930739m2evb_01 (read/write) 583206 583206 0 0.0
.app_xip_area 460016 460016 0 0.0
.bss 65648 65648 0 0.0
.data 728 728 0 0.0
.rodata 0 0 0 0.0
.text 112 112 0 0.0
lock cyw930739m2evb_01 (read/write) 589126 589126 0 0.0
.app_xip_area 461208 461208 0 0.0
.bss 70376 70376 0 0.0
.data 732 732 0 0.0
.rodata 0 0 0 0.0
.text 112 112 0 0.0
ota-requestor-no-progress-logging cyw930739m2evb_01 (read/write) 588938 588938 0 0.0
.app_xip_area 466564 466564 0 0.0
.bss 64888 64888 0 0.0
.data 672 672 0 0.0
.rodata 0 0 0 0.0
.text 112 112 0 0.0
efr32 lighting-app BRD4161A (read/write) 1087832 1087832 0 0.0
.bss 133284 133284 0 0.0
.data 2048 2048 0 0.0
.text 952480 952480 0 0.0
BRD4161A+rpc (read/write) 1142124 1142124 0 0.0
.bss 149964 149964 0 0.0
.data 2260 2260 0 0.0
.text 989880 989880 0 0.0
BRD4161A+rs911x (read/write) 973656 973656 0 0.0
.bss 161736 161736 0 0.0
.data 2048 2048 0 0.0
.text 809852 809852 0 0.0
lock-app BRD4161A+wf200 (read/write) 1128328 1128328 0 0.0
.bss 144368 144368 0 0.0
.data 2056 2056 0 0.0
.text 981884 981884 0 0.0
window-app BRD4161A (read/write) 1081308 1081308 0 0.0
.bss 134756 134756 0 0.0
.data 2076 2076 0 0.0
.text 944452 944452 0 0.0
esp32 all-clusters-app c3devkit (read only) 1022462 1022458 -4 -0.0
(read/write) 1486274 1486274 0 0.0
.dram0.bss 70296 70296 0 0.0
.dram0.data 14600 14600 0 0.0
.flash.rodata 215936 215936 0 0.0
.flash.text 1022462 1022458 -4 -0.0
.iram0.text 62902 62902 0 0.0
m5stack (read only) 1076107 1076107 0 0.0
(read/write) 488312 488312 0 0.0
.dram0.bss 75808 75808 0 0.0
.dram0.data 34144 34144 0 0.0
.flash.rodata 246364 246364 0 0.0
.flash.text 1070723 1070723 0 0.0
.iram0.text 123267 123267 0 0.0
k32w light k32w0+release (read/write) 642600 642600 0 0.0
.bss 69736 69736 0 0.0
.data 2028 2028 0 0.0
.text 568108 568108 0 0.0
lock k32w0+release (read/write) 699832 699832 0 0.0
.bss 70176 70176 0 0.0
.data 2036 2036 0 0.0
.text 624892 624892 0 0.0
linux all-clusters-app debug (read only) 2989849 2989849 0 0.0
(read/write) 155584 155584 0 0.0
.bss 61888 61888 0 0.0
.data 2064 2064 0 0.0
.data.rel.ro 85272 85272 0 0.0
.dynamic 608 608 0 0.0
.got 4568 4568 0 0.0
.init 27 27 0 0.0
.init_array 1144 1144 0 0.0
.rodata 269067 269067 0 0.0
.text 2542210 2542210 0 0.0
all-clusters-minimal-app debug (read only) 2832889 2832889 0 0.0
(read/write) 147288 147288 0 0.0
.bss 61088 61088 0 0.0
.data 2064 2064 0 0.0
.data.rel.ro 77864 77864 0 0.0
.dynamic 608 608 0 0.0
.got 4488 4488 0 0.0
.init 27 27 0 0.0
.init_array 1136 1136 0 0.0
.rodata 269227 269227 0 0.0
.text 2387698 2387698 0 0.0
bridge-app debug+rpc (read only) 2351177 2351177 0 0.0
(read/write) 127160 127160 0 0.0
.bss 50176 50176 0 0.0
.data 3824 3824 0 0.0
.data.rel.ro 67304 67304 0 0.0
.dynamic 608 608 0 0.0
.got 4392 4392 0 0.0
.init 27 27 0 0.0
.init_array 816 816 0 0.0
.rodata 201384 201384 0 0.0
.text 1987026 1987026 0 0.0
chip-tool debug (read only) 10412065 10412065 0 0.0
(read/write) 628376 628376 0 0.0
.bss 24856 24856 0 0.0
.data 3266 3266 0 0.0
.data.rel.ro 593744 593744 0 0.0
.dynamic 608 608 0 0.0
.got 5088 5088 0 0.0
.init 27 27 0 0.0
.init_array 760 760 0 0.0
.rodata 535317 535317 0 0.0
.text 8431556 8431556 0 0.0
chip-tool-ipv6only arm64 (read only) 9829588 9829588 0 0.0
(read/write) 675729 675729 0 0.0
.bss 32897 32897 0 0.0
.data 3272 3272 0 0.0
.data.rel.ro 621080 621080 0 0.0
.dynamic 560 560 0 0.0
.got 13528 13528 0 0.0
.init 24 24 0 0.0
.init_array 192 192 0 0.0
.rodata 467492 467492 0 0.0
.text 7786516 7786516 0 0.0
lighting-app debug+rpc (read only) 2574169 2574169 0 0.0
(read/write) 130096 130096 0 0.0
.bss 49728 49728 0 0.0
.data 2096 2096 0 0.0
.data.rel.ro 72344 72344 0 0.0
.dynamic 608 608 0 0.0
.got 4392 4392 0 0.0
.init 27 27 0 0.0
.init_array 904 904 0 0.0
.rodata 217104 217104 0 0.0
.text 2186210 2186210 0 0.0
lock-app debug (read only) 2539185 2539185 0 0.0
(read/write) 125176 125176 0 0.0
.bss 48160 48160 0 0.0
.data 1712 1712 0 0.0
.data.rel.ro 69352 69352 0 0.0
.dynamic 608 608 0 0.0
.got 4424 4424 0 0.0
.init 27 27 0 0.0
.init_array 880 880 0 0.0
.rodata 231984 231984 0 0.0
.text 2141122 2141122 0 0.0
ota-provider-app debug (read only) 2343545 2343545 0 0.0
(read/write) 118944 118944 0 0.0
.bss 47776 47776 0 0.0
.data 1936 1936 0 0.0
.data.rel.ro 63336 63336 0 0.0
.dynamic 608 608 0 0.0
.got 4488 4488 0 0.0
.init 27 27 0 0.0
.init_array 760 760 0 0.0
.rodata 207576 207576 0 0.0
.text 1972306 1972306 0 0.0
ota-requestor-app debug (read only) 2464553 2464553 0 0.0
(read/write) 126304 126304 0 0.0
.bss 50144 50144 0 0.0
.data 2240 2240 0 0.0
.data.rel.ro 67992 67992 0 0.0
.dynamic 608 608 0 0.0
.got 4480 4480 0 0.0
.init 27 27 0 0.0
.init_array 824 824 0 0.0
.rodata 211136 211136 0 0.0
.text 2081138 2081138 0 0.0
shell debug (read only) 2573377 2573377 0 0.0
(read/write) 141736 141736 0 0.0
.bss 57736 57736 0 0.0
.data 1264 1264 0 0.0
.data.rel.ro 76944 76944 0 0.0
.dynamic 608 608 0 0.0
.got 4136 4136 0 0.0
.init 27 27 0 0.0
.init_array 1016 1016 0 0.0
.rodata 231250 231250 0 0.0
.text 2184066 2184066 0 0.0
thermostat-no-ble arm64 (read only) 2343388 2343388 0 0.0
(read/write) 141601 141601 0 0.0
.bss 55313 55313 0 0.0
.data 1672 1672 0 0.0
.data.rel.ro 75856 75856 0 0.0
.dynamic 560 560 0 0.0
.got 4992 4992 0 0.0
.init 24 24 0 0.0
.init_array 408 408 0 0.0
.rodata 138964 138964 0 0.0
.text 1967200 1967200 0 0.0
tv-app debug (read only) 3123553 3123553 0 0.0
(read/write) 257416 257416 0 0.0
.bss 167256 167256 0 0.0
.data 4736 4736 0 0.0
.data.rel.ro 78888 78888 0 0.0
.dynamic 608 608 0 0.0
.got 4848 4848 0 0.0
.init 27 27 0 0.0
.init_array 1064 1064 0 0.0
.rodata 253416 253416 0 0.0
.text 2681138 2681138 0 0.0
tv-casting-app debug (read only) 5378297 5378297 0 0.0
(read/write) 158592 158592 0 0.0
.bss 51352 51352 0 0.0
.data 2432 2432 0 0.0
.data.rel.ro 98432 98432 0 0.0
.dynamic 608 608 0 0.0
.got 4736 4736 0 0.0
.init 27 27 0 0.0
.init_array 1024 1024 0 0.0
.rodata 338513 338513 0 0.0
.text 4772706 4772706 0 0.0
mbed lock-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2450384 2450384 0 0.0
.bss 214516 214516 0 0.0
.data 5872 5872 0 0.0
.text 1413028 1413028 0 0.0
nrfconnect all-clusters-app nrf52840dk_nrf52840 (read/write) 1172691 1172691 0 0.0
bss 143140 143140 0 0.0
rodata 141828 141828 0 0.0
text 808808 808808 0 0.0
all-clusters-minimal-app nrf52840dk_nrf52840 (read/write) 1152743 1152743 0 0.0
bss 142376 142376 0 0.0
rodata 133360 133360 0 0.0
text 798120 798116 -4 -0.0
p6 all-clusters-app default (read only) 881560 881560 0 0.0
(read/write) 1686700 1686700 0 0.0
.bss 149136 149136 0 0.0
.data 2648 2648 0 0.0
.text 1526528 1526528 0 0.0
all-clusters-minimal-app default (read only) 882280 882280 0 0.0
(read/write) 1630796 1630796 0 0.0
.bss 148416 148416 0 0.0
.data 2648 2648 0 0.0
.text 1471344 1471344 0 0.0
light-app default (read only) 890584 890584 0 0.0
(read/write) 1552220 1552220 0 0.0
.bss 140320 140320 0 0.0
.data 2440 2440 0 0.0
.text 1401072 1401072 0 0.0
lock-app default (read only) 886112 886112 0 0.0
(read/write) 1589828 1589828 0 0.0
.bss 144776 144776 0 0.0
.data 2456 2456 0 0.0
.text 1434208 1434208 0 0.0
telink light-switch-app tlsr9518adk80d (read/write) 799600 799600 0 0.0
bss 70816 70816 0 0.0
noinit 40416 40416 0 0.0
text 567238 567240 2 0.0
lighting-app tlsr9518adk80d (read/write) 819708 819708 0 0.0
bss 71660 71660 0 0.0
noinit 40416 40416 0 0.0
text 583812 583812 0 0.0

Copy link
Contributor

@bzbarsky-apple bzbarsky-apple left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great, thank you!

@bzbarsky-apple
Copy link
Contributor

Fast-tracking darwin-specific change.

@bzbarsky-apple bzbarsky-apple merged commit 00b5886 into project-chip:master Jul 28, 2022
github-actions bot pushed a commit that referenced this pull request Jul 28, 2022
…Callback (#21349)

Original version (3ca630c) could cause non balanced dispatch_suspend/dispatch_resume which is not allowed by the dispatch API, as pointed out in #pullrequestreview-1051517126.

This version does not use dispatch_suspend/resume any more to prevent the problem, additionally making the implementation behaving as similar as possible as, and compatible with, the select() based fallback.

The fallback is required by some tests even on dispatch based platforms, when no dispatch queue can be started.

But for real applications on dispatch based platforms, there should always be a dispatch queue, so the implementation now issues a warning when RequestCallbackOnPendingXXX is called without a dispatch queue available.
woody-apple added a commit that referenced this pull request Jul 29, 2022
…Callback (#21349) (#21359)

Original version (3ca630c) could cause non balanced dispatch_suspend/dispatch_resume which is not allowed by the dispatch API, as pointed out in #pullrequestreview-1051517126.

This version does not use dispatch_suspend/resume any more to prevent the problem, additionally making the implementation behaving as similar as possible as, and compatible with, the select() based fallback.

The fallback is required by some tests even on dispatch based platforms, when no dispatch queue can be started.

But for real applications on dispatch based platforms, there should always be a dispatch queue, so the implementation now issues a warning when RequestCallbackOnPendingXXX is called without a dispatch queue available.

Co-authored-by: Lukas Zeller <[email protected]>
isiu-apple pushed a commit to isiu-apple/connectedhomeip that referenced this pull request Sep 16, 2022
…Callback (project-chip#21349)

Original version (3ca630c) could cause non balanced dispatch_suspend/dispatch_resume which is not allowed by the dispatch API, as pointed out in #pullrequestreview-1051517126.

This version does not use dispatch_suspend/resume any more to prevent the problem, additionally making the implementation behaving as similar as possible as, and compatible with, the select() based fallback.

The fallback is required by some tests even on dispatch based platforms, when no dispatch queue can be started.

But for real applications on dispatch based platforms, there should always be a dispatch queue, so the implementation now issues a warning when RequestCallbackOnPendingXXX is called without a dispatch queue available.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants