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

Avoid double-delete when a Darwin subscribeAttribute subscription errors out. #23557

Conversation

bzbarsky-apple
Copy link
Contributor

Right now Darwin subscribeAttribute subscriptions do not support turning off auto-resubscribe, so never error out. But if we were to add that, we would end up with double delete: once when the error happens, and once from OnDone.

This fix:

  1. Ensures that we don't flag callback bridges as mKeepAlive until we have
    successfully sent a subscribe request.
  2. Stops deleting on error if mKeepAlive is true.
  3. Ensures the delete of the bridge from OnDone does not happen until after
    we have finished using the bridge object (e.g. to handle already-queued data
    or error notifications). We do this by queueing the delete to the same
    dispatch queue as the data/error notifications.

@github-actions
Copy link

github-actions bot commented Nov 9, 2022

PR #23557: Size comparison from 1ff789e to 88ffb2b

Increases (7 builds for bl602, cc13x2_26x2, psoc6, qpg, telink)
platform target config section 1ff789e 88ffb2b change % change
bl602 lighting-app bl602+rpc (read/write) 1421074 1421082 8 0.0
.text 1090680 1090682 2 0.0
cc13x2_26x2 lock-mtd LP_CC2652R7 (read/write) 183540 183548 8 0.0
psoc6 all-clusters cy8ckit_062s2_43012 .debug_info 27023906 27023907 1 0.0
all-clusters-minimal cy8ckit_062s2_43012 .debug_info 26760536 26760537 1 0.0
light cy8ckit_062s2_43012 .debug_info 22225736 2222573 1 0.0
qpg lock-app qpg6105+debug (read/write) 1115052 1115060 8 0.0
.text 562148 562156 8 0.0
telink lighting-app tlsr9518adk80d (read/write) 874924 874932 8 0.0
text 624114 624118 4 0.0
Decreases (8 builds for bl702, cc13x2_26x2, cyw30739, esp32, psoc6, telink)
platform target config section 1ff789e 88ffb2b change % change
bl702 lighting-app bl702 .debug_info 39161319 39161318 -1 -0.0
.text 955518 955516 -2 -0.0
bl702+rpc .debug_info 43430541 43430540 -1 -0.0
.text 1029216 1029214 -2 -0.0
cc13x2_26x2 lock-mtd LP_CC2652R7 (read only) 660819 660811 -8 -0.0
.text 557032 557024 -8 -0.0
cyw30739 ota-requestor-no-progress-logging cyw930739m2evb_01 (read/write) 543714 543706 -8 -0.0
.app_xip_area 425444 425436 -8 -0.0
esp32 all-clusters-app c3devkit (read only) 1224292 1224290 -2 -0.0
.flash.text 1224292 1224290 -2 -0.0
psoc6 lock cy8ckit_062s2_43012 .debug_info 2245936 22459360 -1 -0.0
telink all-clusters-minimal-app tlsr9518adk80d text 612690 612688 -2 -0.0
ota-requestor-app tlsr9518adk80d text 565534 565532 -2 -0.0
Full report (50 builds for bl602, bl702, cc13x2_26x2, cyw30739, efr32, esp32, k32w, linux, nrfconnect, psoc6, qpg, telink)
platform target config section 1ff789e 88ffb2b change % change
bl602 lighting-app bl602 (read/write) 1375258 1375258 0 0.0
.bss 90041 90041 0 0.0
.data 9984 9984 0 0.0
.text 1059188 1059188 0 0.0
bl602+rpc (read/write) 1421074 1421082 8 0.0
.bss 98081 98081 0 0.0
.data 10376 10376 0 0.0
.text 1090680 1090682 2 0.0
bl702 lighting-app bl702 (read only) 3262 3262 0 0.0
(read/write) 1195127 1195127 0 0.0
.bleromro 6296 6296 0 0.0
.bleromrw 124 124 0 0.0
.boot2 688 688 0 0.0
.bss 67166 67166 0 0.0
.bss_psram 30048 30048 0 0.0
.comment 48 48 0 0.0
.data 4048 4048 0 0.0
.debug_abbrev 1523919 1523919 0 0.0
.debug_aranges 132304 132304 0 0.0
.debug_frame 485212 485212 0 0.0
.debug_info 39161319 39161318 -1 -0.0
.debug_line 5271721 5271721 0 0.0
.debug_loc 3367060 3367060 0 0.0
.debug_ranges 360272 360272 0 0.0
.debug_str 3462154 3462154 0 0.0
.hbn 509 509 0 0.0
.hbn_noinit 260 260 0 0.0
.init 342 342 0 0.0
.init_array 144 144 0 0.0
.psram 0 0 0 0.0
.riscv.attributes 47 47 0 0.0
.rodata 116488 116488 0 0.0
.rsvd 3188 3188 0 0.0
.shstrtab 293 293 0 0.0
.stack 2048 2048 0 0.0
.strtab 566532 566532 0 0.0
.symtab 171808 171808 0 0.0
.tcm_data 36 36 0 0.0
.tcmcode 3262 3262 0 0.0
.text 0 0 0 0.0
955518 955516 -2 -0.0
bl702+rpc (read only) 3262 3262 0 0.0
(read/write) 1283267 1283267 0 0.0
.bleromro 6296 6296 0 0.0
.bleromrw 124 124 0 0.0
.boot2 688 688 0 0.0
.bss 75214 75214 0 0.0
.bss_psram 30320 30320 0 0.0
.comment 48 48 0 0.0
.data 4576 4576 0 0.0
.debug_abbrev 1667931 1667931 0 0.0
.debug_aranges 140368 140368 0 0.0
.debug_frame 512416 512416 0 0.0
.debug_info 43430541 43430540 -1 -0.0
.debug_line 5667090 5667090 0 0.0
.debug_loc 3561296 3561296 0 0.0
.debug_ranges 383296 383296 0 0.0
.debug_str 3859443 3859443 0 0.0
.hbn 509 509 0 0.0
.hbn_noinit 260 260 0 0.0
.init 342 342 0 0.0
.init_array 160 160 0 0.0
.psram 0 0 0 0.0
.riscv.attributes 47 47 0 0.0
.rodata 130120 130120 0 0.0
.rsvd 3188 3188 0 0.0
.shstrtab 293 293 0 0.0
.stack 2048 2048 0 0.0
.strtab 626747 626747 0 0.0
.symtab 189920 189920 0 0.0
.tcm_data 36 36 0 0.0
.tcmcode 3262 3262 0 0.0
.text 0 0 0 0.0
1029216 1029214 -2 -0.0
cc13x2_26x2 all-clusters-app LP_CC2652R7 (read only) 678163 678163 0 0.0
(read/write) 173372 173372 0 0.0
.bss 81228 81228 0 0.0
.data 3380 3380 0 0.0
.rodata 89851 89851 0 0.0
.text 588000 588000 0 0.0
all-clusters-minimal-app LP_CC2652R7 (read only) 642459 642459 0 0.0
(read/write) 157996 157996 0 0.0
.bss 80500 80500 0 0.0
.data 3380 3380 0 0.0
.rodata 78987 78987 0 0.0
.text 563152 563152 0 0.0
lock-ftd LP_CC2652R7 (read only) 676303 676303 0 0.0
(read/write) 172800 172800 0 0.0
.bss 78884 78884 0 0.0
.data 3304 3304 0 0.0
.rodata 77271 77271 0 0.0
.text 598552 598552 0 0.0
lock-mtd LP_CC2652R7 (read only) 660819 660811 -8 -0.0
(read/write) 183540 183548 8 0.0
.bss 74140 74140 0 0.0
.data 3304 3304 0 0.0
.rodata 103307 103307 0 0.0
.text 557032 557024 -8 -0.0
pump-app LP_CC2652R7 (read only) 688743 688743 0 0.0
(read/write) 161096 161096 0 0.0
.bss 78852 78852 0 0.0
.data 3296 3296 0 0.0
.rodata 90759 90759 0 0.0
.text 597500 597500 0 0.0
pump-controller-app LP_CC2652R7 (read only) 673035 673035 0 0.0
(read/write) 176900 176900 0 0.0
.bss 78948 78948 0 0.0
.data 3292 3292 0 0.0
.rodata 86307 86307 0 0.0
.text 586248 586248 0 0.0
shell LP_CC2652R7 (read only) 669382 669382 0 0.0
(read/write) 184472 184472 0 0.0
.bss 83548 83548 0 0.0
.data 3376 3376 0 0.0
.rodata 86598 86598 0 0.0
.text 582468 582468 0 0.0
cyw30739 light cyw930739m2evb_01 (read/write) 587230 587230 0 0.0
.app_xip_area 463440 463440 0 0.0
.bss 66208 66208 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) 591338 591338 0 0.0
.app_xip_area 462252 462252 0 0.0
.bss 71496 71496 0 0.0
.data 736 736 0 0.0
.rodata 0 0 0 0.0
.text 112 112 0 0.0
ota-requestor-no-progress-logging cyw930739m2evb_01 (read/write) 543714 543706 -8 -0.0
.app_xip_area 425444 425436 -8 -0.0
.bss 60736 60736 0 0.0
.data 684 684 0 0.0
.rodata 0 0 0 0.0
.text 112 112 0 0.0
efr32 lighting-app BRD4161A+rpc (read/write) 974172 974172 0 0.0
.bss 152260 152260 0 0.0
.data 2168 2168 0 0.0
.text 819724 819724 0 0.0
BRD4161A+rs911x (read/write) 1034720 1034720 0 0.0
.bss 186728 186728 0 0.0
.data 2012 2012 0 0.0
.text 845956 845956 0 0.0
BRD4187C (read/write) 1146552 1146552 0 0.0
.bss 138648 138648 0 0.0
.data 2516 2516 0 0.0
.text 980792 980792 0 0.0
lock-app BRD4161A+wf200 (read/write) 1160120 1160120 0 0.0
.bss 158256 158256 0 0.0
.data 2020 2020 0 0.0
.text 999820 999820 0 0.0
window-app BRD4187C (read/write) 1139772 1139772 0 0.0
.bss 140064 140064 0 0.0
.data 2540 2540 0 0.0
.text 972572 972572 0 0.0
esp32 all-clusters-app c3devkit (read only) 1224292 1224290 -2 -0.0
(read/write) 1788614 1788614 0 0.0
.dram0.bss 76944 76944 0 0.0
.dram0.data 13840 13840 0 0.0
.flash.rodata 258184 258184 0 0.0
.flash.text 1224292 1224290 -2 -0.0
.iram0.text 65204 65204 0 0.0
m5stack (read only) 1234191 1234191 0 0.0
(read/write) 564412 564412 0 0.0
.dram0.bss 82320 82320 0 0.0
.dram0.data 34296 34296 0 0.0
.flash.rodata 315128 315128 0 0.0
.flash.text 1228807 1228807 0 0.0
.iram0.text 123939 123939 0 0.0
k32w contact k32w0+release (read/write) 661796 661796 0 0.0
.bss 77112 77112 0 0.0
.data 2104 2104 0 0.0
.text 563468 563468 0 0.0
light k32w0+release (read/write) 671816 671816 0 0.0
.bss 74912 74912 0 0.0
.data 2060 2060 0 0.0
.text 592116 592116 0 0.0
lock k32w0+release (read/write) 633356 633356 0 0.0
.bss 75672 75672 0 0.0
.data 2080 2080 0 0.0
.text 552876 552876 0 0.0
linux all-clusters-app debug (read only) 3085417 3085417 0 0.0
(read/write) 158312 158312 0 0.0
.bss 62464 62464 0 0.0
.data 2272 2272 0 0.0
.data.rel.ro 86984 86984 0 0.0
.dynamic 608 608 0 0.0
.got 4768 4768 0 0.0
.init 27 27 0 0.0
.init_array 1184 1184 0 0.0
.rodata 280939 280939 0 0.0
.text 2620274 2620274 0 0.0
all-clusters-minimal-app debug (read only) 2911113 2911113 0 0.0
(read/write) 149712 149712 0 0.0
.bss 61664 61664 0 0.0
.data 2240 2240 0 0.0
.data.rel.ro 79352 79352 0 0.0
.dynamic 608 608 0 0.0
.got 4680 4680 0 0.0
.init 27 27 0 0.0
.init_array 1160 1160 0 0.0
.rodata 280427 280427 0 0.0
.text 2449522 2449522 0 0.0
bridge-app debug+rpc (read only) 2410081 2410081 0 0.0
(read/write) 129448 129448 0 0.0
.bss 51008 51008 0 0.0
.data 3792 3792 0 0.0
.data.rel.ro 68616 68616 0 0.0
.dynamic 608 608 0 0.0
.got 4568 4568 0 0.0
.init 27 27 0 0.0
.init_array 832 832 0 0.0
.rodata 210688 210688 0 0.0
.text 2032322 2032322 0 0.0
chip-tool debug (read only) 11079241 11079241 0 0.0
(read/write) 658304 658304 0 0.0
.bss 25912 25912 0 0.0
.data 2754 2754 0 0.0
.data.rel.ro 623040 623040 0 0.0
.dynamic 608 608 0 0.0
.got 5184 5184 0 0.0
.init 27 27 0 0.0
.init_array 768 768 0 0.0
.rodata 591837 591837 0 0.0
.text 8963988 8963988 0 0.0
chip-tool-ipv6only arm64 (read only) 10433596 10433596 0 0.0
(read/write) 706353 706353 0 0.0
.bss 33905 33905 0 0.0
.data 2768 2768 0 0.0
.data.rel.ro 650672 650672 0 0.0
.dynamic 560 560 0 0.0
.got 13912 13912 0 0.0
.init 24 24 0 0.0
.init_array 208 208 0 0.0
.rodata 518220 518220 0 0.0
.text 8260020 8260020 0 0.0
lighting-app debug+rpc (read only) 2641105 2641105 0 0.0
(read/write) 132296 132296 0 0.0
.bss 49984 49984 0 0.0
.data 2288 2288 0 0.0
.data.rel.ro 73832 73832 0 0.0
.dynamic 608 608 0 0.0
.got 4632 4632 0 0.0
.init 27 27 0 0.0
.init_array 928 928 0 0.0
.rodata 227552 227552 0 0.0
.text 2237138 2237138 0 0.0
lock-app debug (read only) 2600345 2600345 0 0.0
(read/write) 127216 127216 0 0.0
.bss 48416 48416 0 0.0
.data 1904 1904 0 0.0
.data.rel.ro 70680 70680 0 0.0
.dynamic 608 608 0 0.0
.got 4664 4664 0 0.0
.init 27 27 0 0.0
.init_array 904 904 0 0.0
.rodata 243848 243848 0 0.0
.text 2185074 2185074 0 0.0
ota-provider-app debug (read only) 2396513 2396513 0 0.0
(read/write) 120744 120744 0 0.0
.bss 47936 47936 0 0.0
.data 2128 2128 0 0.0
.data.rel.ro 64600 64600 0 0.0
.dynamic 608 608 0 0.0
.got 4680 4680 0 0.0
.init 27 27 0 0.0
.init_array 768 768 0 0.0
.rodata 216328 216328 0 0.0
.text 2011922 2011922 0 0.0
ota-requestor-app debug (read only) 2561825 2561825 0 0.0
(read/write) 129088 129088 0 0.0
.bss 50464 50464 0 0.0
.data 2496 2496 0 0.0
.data.rel.ro 69960 69960 0 0.0
.dynamic 608 608 0 0.0
.got 4672 4672 0 0.0
.init 27 27 0 0.0
.init_array 856 856 0 0.0
.rodata 223408 223408 0 0.0
.text 2161058 2161058 0 0.0
shell debug (read only) 2621521 2621521 0 0.0
(read/write) 142808 142808 0 0.0
.bss 57864 57864 0 0.0
.data 1264 1264 0 0.0
.data.rel.ro 77880 77880 0 0.0
.dynamic 608 608 0 0.0
.got 4128 4128 0 0.0
.init 27 27 0 0.0
.init_array 1032 1032 0 0.0
.rodata 239250 239250 0 0.0
.text 2223042 2223042 0 0.0
thermostat-no-ble arm64 (read only) 2392092 2392092 0 0.0
(read/write) 143777 143777 0 0.0
.bss 55393 55393 0 0.0
.data 1816 1816 0 0.0
.data.rel.ro 77328 77328 0 0.0
.dynamic 560 560 0 0.0
.got 5176 5176 0 0.0
.init 24 24 0 0.0
.init_array 440 440 0 0.0
.rodata 144724 144724 0 0.0
.text 2004000 2004000 0 0.0
tv-app debug (read only) 3254897 3254897 0 0.0
(read/write) 261832 261832 0 0.0
.bss 170648 170648 0 0.0
.data 4256 4256 0 0.0
.data.rel.ro 80224 80224 0 0.0
.dynamic 608 608 0 0.0
.got 5000 5000 0 0.0
.init 27 27 0 0.0
.init_array 1064 1064 0 0.0
.rodata 268216 268216 0 0.0
.text 2792978 2792978 0 0.0
tv-casting-app debug (read only) 5580977 5580977 0 0.0
(read/write) 161720 161720 0 0.0
.bss 52120 52120 0 0.0
.data 1936 1936 0 0.0
.data.rel.ro 101056 101056 0 0.0
.dynamic 608 608 0 0.0
.got 4912 4912 0 0.0
.init 27 27 0 0.0
.init_array 1048 1048 0 0.0
.rodata 355001 355001 0 0.0
.text 4950594 4950594 0 0.0
nrfconnect all-clusters-app nrf52840dk_nrf52840 (read/write) 1187871 1187871 0 0.0
bss 145285 145285 0 0.0
rodata 144516 144516 0 0.0
text 816986 816986 0 0.0
all-clusters-minimal-app nrf52840dk_nrf52840 (read/write) 1167283 1167283 0 0.0
bss 144512 144512 0 0.0
rodata 136304 136304 0 0.0
text 805536 805536 0 0.0
psoc6 all-clusters cy8ckit_062s2_43012 (read only) 841968 841968 0 0.0
(read/write) 1746244 1746244 0 0.0
.ARM.attributes 46 46 0 0.0
.ARM.exidx 8 8 0 0.0
.bss 188712 188712 0 0.0
.comment 204 204 0 0.0
.copy.table 24 24 0 0.0
.cy_m0p_image 6216 6216 0 0.0
.cy_sharedmem 8 8 0 0.0
.data 2664 2664 0 0.0
.debug_abbrev 1235716 1235716 0 0.0
.debug_aranges 110704 110704 0 0.0
.debug_frame 371284 371284 0 0.0
.debug_info 27023906 27023907 1 0.0
.debug_line 3685946 3685946 0 0.0
.debug_loc 3603685 3603685 0 0.0
.debug_ranges 339544 339544 0 0.0
.debug_str 3431045 3431045 0 0.0
.heap 841968 841968 0 0.0
.noinit 148 148 0 0.0
.ramVectors 736 736 0 0.0
.shstrtab 288 288 0 0.0
.stab 156 156 0 0.0
.stabstr 335 335 0 0.0
.stack_dummy 4096 4096 0 0.0
.strtab 570258 570258 0 0.0
.symtab 421440 421440 0 0.0
.text 1546480 1546480 0 0.0
.zero.table 8 8 0 0.0
text 0 0 0 0.0
all-clusters-minimal cy8ckit_062s2_43012 (read only) 842704 842704 0 0.0
(read/write) 1688796 1688796 0 0.0
.ARM.attributes 46 46 0 0.0
.ARM.exidx 8 8 0 0.0
.bss 187976 187976 0 0.0
.comment 204 204 0 0.0
.copy.table 24 24 0 0.0
.cy_m0p_image 6216 6216 0 0.0
.cy_sharedmem 8 8 0 0.0
.data 2664 2664 0 0.0
.debug_abbrev 1227559 1227559 0 0.0
.debug_aranges 110176 110176 0 0.0
.debug_frame 374364 374364 0 0.0
.debug_info 26760536 26760537 1 0.0
.debug_line 3706930 3706930 0 0.0
.debug_loc 3591322 3591322 0 0.0
.debug_ranges 338160 338160 0 0.0
.debug_str 3420065 3420065 0 0.0
.heap 842704 842704 0 0.0
.noinit 148 148 0 0.0
.ramVectors 736 736 0 0.0
.shstrtab 288 288 0 0.0
.stab 156 156 0 0.0
.stabstr 335 335 0 0.0
.stack_dummy 4096 4096 0 0.0
.strtab 534347 534347 0 0.0
.symtab 407872 407872 0 0.0
.text 1489768 1489768 0 0.0
.zero.table 0 0 0 0.0
8 8 0 0.0
light cy8ckit_062s2_43012 (read only) 850888 850888 0 0.0
(read/write) 1606956 1606956 0 0.0
.ARM.attributes 46 46 0 0.0
.ARM.exidx 8 8 0 0.0
.bss 180000 180000 0 0.0
.comment 204 204 0 0.0
.copy.table 24 24 0 0.0
.cy_m0p_image 6216 6216 0 0.0
.cy_sharedmem 8 8 0 0.0
.data 2456 2456 0 0.0
.debug_abbrev 1062020 1062020 0 0.0
.debug_aranges 102376 102376 0 0.0
.debug_frame 344676 344676 0 0.0
.debug_info 22225736 2222573 1 0.0
.debug_line 3276055 3276055 0 0.0
.debug_loc 3288807 3288807 0 0.0
.debug_ranges 303440 303440 0 0.0
.debug_str 3225600 3225600 0 0.0
.heap 850888 850888 0 0.0
.noinit 148 148 0 0.0
.ramVectors 736 736 0 0.0
.shstrtab 288 288 0 0.0
.stab 156 156 0 0.0
.stabstr 335 335 0 0.0
.stack_dummy 4096 4096 0 0.0
.strtab 470672 470672 0 0.0
.symtab 376240 376240 0 0.0
.text 1416112 1416112 0 0.0
.zero.table 0 0 0 0.0
8 8 0 0.0
lock cy8ckit_062s2_43012 (read only) 845896 845896 0 0.0
(read/write) 1640964 1640964 0 0.0
.ARM.attributes 46 46 0 0.0
.ARM.exidx 8 8 0 0.0
.bss 184976 184976 0 0.0
.comment 204 204 0 0.0
.copy.table 24 24 0 0.0
.cy_m0p_image 6216 6216 0 0.0
.cy_sharedmem 8 8 0 0.0
.data 2472 2472 0 0.0
.debug_abbrev 1063995 1063995 0 0.0
.debug_aranges 102776 102776 0 0.0
.debug_frame 346552 346552 0 0.0
.debug_info 2245936 22459360 -1 -0.0
.debug_line 3273175 3273175 0 0.0
.debug_loc 3316660 3316660 0 0.0
.debug_ranges 305400 305400 0 0.0
.debug_str 3244971 3244971 0 0.0
.heap 845896 845896 0 0.0
.noinit 148 148 0 0.0
.ramVectors 736 736 0 0.0
.shstrtab 288 288 0 0.0
.stab 156 156 0 0.0
.stabstr 335 335 0 0.0
.stack_dummy 4096 4096 0 0.0
.strtab 473075 473075 0 0.0
.symtab 377936 377936 0 0.0
.text 1445128 1445128 0 0.0
.zero.table 0 0 0 0.0
8 8 0 0.0
qpg lighting-app qpg6105+debug (read/write) 1149312 1149312 0 0.0
.bss 109860 109860 0 0.0
.data 848 848 0 0.0
.text 596412 596412 0 0.0
lock-app qpg6105+debug (read/write) 1115052 1115060 8 0.0
.bss 106332 106332 0 0.0
.data 836 836 0 0.0
.text 562148 562156 8 0.0
telink all-clusters-app tlsr9518adk80d (read/write) 937352 937352 0 0.0
bss 81620 81620 0 0.0
noinit 43440 43440 0 0.0
text 648702 648702 0 0.0
all-clusters-minimal-app tlsr9518adk80d (read/write) 875344 875344 0 0.0
bss 80844 80844 0 0.0
noinit 43440 43440 0 0.0
text 612690 612688 -2 -0.0
light-switch-app tlsr9518adk80d (read/write) 790700 790700 0 0.0
bss 72468 72468 0 0.0
noinit 43520 43520 0 0.0
text 554152 554152 0 0.0
lighting-app tlsr9518adk80d (read/write) 874924 874932 8 0.0
bss 82232 82232 0 0.0
noinit 43520 43520 0 0.0
text 624114 624118 4 0.0
ota-requestor-app tlsr9518adk80d (read/write) 805192 805192 0 0.0
bss 74040 74040 0 0.0
noinit 43520 43520 0 0.0
text 565534 565532 -2 -0.0

…ors out.

Right now Darwin subscribeAttribute subscriptions do not support turning off auto-resubscribe, so never error out.  But if we were to add that, we would end up with double delete: once when the error happens, and once from OnDone.

This fix:

1) Ensures that we don't flag callback bridges as mKeepAlive until we have
   successfully sent a subscribe request.
2) Stops deleting on error if mKeepAlive is true.
3) Ensures the delete of the bridge from OnDone does not happen until after
   we have finished using the bridge object (e.g. to handle already-queued data
   or error notifications).  We do this by queueing the delete to the same
   dispatch queue as the data/error notifications.
@bzbarsky-apple bzbarsky-apple force-pushed the callback-bridge-avoid-double-delete branch from 88ffb2b to cdc8984 Compare November 14, 2022 14:15
@bzbarsky-apple
Copy link
Contributor Author

Fast-tracking platform-specific change with platform owner review.

@github-actions
Copy link

github-actions bot commented Nov 14, 2022

PR #23557: Size comparison from 477dd4a to cdc8984

Increases (6 builds for bl602, cc13x2_26x2, cyw30739, nrfconnect, psoc6, telink)
platform target config section 477dd4a cdc8984 change % change
bl602 lighting-app bl602+rpc (read/write) 1421074 1421082 8 0.0
.text 1090680 1090682 2 0.0
cc13x2_26x2 pump-controller-app LP_CC2652R7 (read only) 673019 673027 8 0.0
.text 586232 586240 8 0.0
cyw30739 ota-requestor-no-progress-logging cyw930739m2evb_01 (read/write) 543706 543714 8 0.0
.app_xip_area 425436 425444 8 0.0
nrfconnect all-clusters-app nrf52840dk_nrf52840 text 816978 816982 4 0.0
psoc6 all-clusters-minimal cy8ckit_062s2_43012 .debug_info 26760523 26760524 1 0.0
telink all-clusters-minimal-app tlsr9518adk80d text 612688 612690 2 0.0
Decreases (6 builds for bl602, bl702, cc13x2_26x2, esp32, psoc6, telink)
platform target config section 477dd4a cdc8984 change % change
bl602 lighting-app bl602 (read/write) 1375258 1375250 -8 -0.0
.text 1059188 1059184 -4 -0.0
bl702 lighting-app bl702 .debug_info 39161307 39161305 -2 -0.0
.text 955518 955514 -4 -0.0
cc13x2_26x2 pump-controller-app LP_CC2652R7 (read/write) 176916 176908 -8 -0.0
esp32 all-clusters-app c3devkit (read only) 1224290 1224288 -2 -0.0
.flash.text 1224290 1224288 -2 -0.0
psoc6 light cy8ckit_062s2_43012 .debug_info 22225723 22225722 -1 -0.0
telink light-switch-app tlsr9518adk80d text 554152 554150 -2 -0.0
Full report (40 builds for bl602, bl702, cc13x2_26x2, cyw30739, efr32, esp32, k32w, linux, mbed, nrfconnect, psoc6, qpg, telink)
platform target config section 477dd4a cdc8984 change % change
bl602 lighting-app bl602 (read/write) 1375258 1375250 -8 -0.0
.bss 90041 90041 0 0.0
.data 9984 9984 0 0.0
.text 1059188 1059184 -4 -0.0
bl602+rpc (read/write) 1421074 1421082 8 0.0
.bss 98081 98081 0 0.0
.data 10376 10376 0 0.0
.text 1090680 1090682 2 0.0
bl702 lighting-app bl702 (read only) 3262 3262 0 0.0
(read/write) 1195127 1195127 0 0.0
.bleromro 6296 6296 0 0.0
.bleromrw 124 124 0 0.0
.boot2 688 688 0 0.0
.bss 67166 67166 0 0.0
.bss_psram 30048 30048 0 0.0
.comment 48 48 0 0.0
.data 4048 4048 0 0.0
.debug_abbrev 1523919 1523919 0 0.0
.debug_aranges 132304 132304 0 0.0
.debug_frame 485212 485212 0 0.0
.debug_info 39161307 39161305 -2 -0.0
.debug_line 5271709 5271709 0 0.0
.debug_loc 3367110 3367110 0 0.0
.debug_ranges 360272 360272 0 0.0
.debug_str 3462152 3462152 0 0.0
.hbn 509 509 0 0.0
.hbn_noinit 260 260 0 0.0
.init 342 342 0 0.0
.init_array 144 144 0 0.0
.psram 0 0 0 0.0
.riscv.attributes 47 47 0 0.0
.rodata 116488 116488 0 0.0
.rsvd 3188 3188 0 0.0
.shstrtab 293 293 0 0.0
.stack 2048 2048 0 0.0
.strtab 566531 566531 0 0.0
.symtab 171808 171808 0 0.0
.tcm_data 36 36 0 0.0
.tcmcode 3262 3262 0 0.0
.text 0 0 0 0.0
955518 955514 -4 -0.0
bl702+rpc (read only) 3262 3262 0 0.0
(read/write) 1283267 1283267 0 0.0
.bleromro 6296 6296 0 0.0
.bleromrw 124 124 0 0.0
.boot2 688 688 0 0.0
.bss 75214 75214 0 0.0
.bss_psram 30320 30320 0 0.0
.comment 48 48 0 0.0
.data 4576 4576 0 0.0
.debug_abbrev 1667931 1667931 0 0.0
.debug_aranges 140368 140368 0 0.0
.debug_frame 512416 512416 0 0.0
.debug_info 43430528 43430528 0 0.0
.debug_line 5667078 5667078 0 0.0
.debug_loc 3561346 3561346 0 0.0
.debug_ranges 383296 383296 0 0.0
.debug_str 3859441 3859441 0 0.0
.hbn 509 509 0 0.0
.hbn_noinit 260 260 0 0.0
.init 342 342 0 0.0
.init_array 160 160 0 0.0
.psram 0 0 0 0.0
.riscv.attributes 47 47 0 0.0
.rodata 130120 130120 0 0.0
.rsvd 3188 3188 0 0.0
.shstrtab 293 293 0 0.0
.stack 2048 2048 0 0.0
.strtab 626746 626746 0 0.0
.symtab 189920 189920 0 0.0
.tcm_data 36 36 0 0.0
.tcmcode 3262 3262 0 0.0
.text 0 0 0 0.0
1029214 1029214 0 0.0
cc13x2_26x2 all-clusters-app LP_CC2652R7 (read only) 678163 678163 0 0.0
(read/write) 173372 173372 0 0.0
.bss 81228 81228 0 0.0
.data 3380 3380 0 0.0
.rodata 89851 89851 0 0.0
.text 588000 588000 0 0.0
all-clusters-minimal-app LP_CC2652R7 (read only) 642459 642459 0 0.0
(read/write) 157996 157996 0 0.0
.bss 80500 80500 0 0.0
.data 3380 3380 0 0.0
.rodata 78987 78987 0 0.0
.text 563152 563152 0 0.0
lock-ftd LP_CC2652R7 (read only) 676295 676295 0 0.0
(read/write) 172808 172808 0 0.0
.bss 78884 78884 0 0.0
.data 3304 3304 0 0.0
.rodata 77271 77271 0 0.0
.text 598544 598544 0 0.0
lock-mtd LP_CC2652R7 (read only) 660819 660819 0 0.0
(read/write) 183540 183540 0 0.0
.bss 74140 74140 0 0.0
.data 3304 3304 0 0.0
.rodata 103307 103307 0 0.0
.text 557032 557032 0 0.0
pump-app LP_CC2652R7 (read only) 688743 688743 0 0.0
(read/write) 161096 161096 0 0.0
.bss 78852 78852 0 0.0
.data 3296 3296 0 0.0
.rodata 90759 90759 0 0.0
.text 597500 597500 0 0.0
pump-controller-app LP_CC2652R7 (read only) 673019 673027 8 0.0
(read/write) 176916 176908 -8 -0.0
.bss 78948 78948 0 0.0
.data 3292 3292 0 0.0
.rodata 86307 86307 0 0.0
.text 586232 586240 8 0.0
shell LP_CC2652R7 (read only) 669382 669382 0 0.0
(read/write) 184472 184472 0 0.0
.bss 83548 83548 0 0.0
.data 3376 3376 0 0.0
.rodata 86598 86598 0 0.0
.text 582468 582468 0 0.0
cyw30739 light cyw930739m2evb_01 (read/write) 587230 587230 0 0.0
.app_xip_area 463440 463440 0 0.0
.bss 66208 66208 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) 591338 591338 0 0.0
.app_xip_area 462252 462252 0 0.0
.bss 71496 71496 0 0.0
.data 736 736 0 0.0
.rodata 0 0 0 0.0
.text 112 112 0 0.0
ota-requestor-no-progress-logging cyw930739m2evb_01 (read/write) 543706 543714 8 0.0
.app_xip_area 425436 425444 8 0.0
.bss 60736 60736 0 0.0
.data 684 684 0 0.0
.rodata 0 0 0 0.0
.text 112 112 0 0.0
efr32 lighting-app BRD4161A+rpc (read/write) 974172 974172 0 0.0
.bss 152260 152260 0 0.0
.data 2168 2168 0 0.0
.text 819724 819724 0 0.0
BRD4161A+rs911x (read/write) 1034704 1034704 0 0.0
.bss 186728 186728 0 0.0
.data 2012 2012 0 0.0
.text 845940 845940 0 0.0
BRD4187C (read/write) 1146552 1146552 0 0.0
.bss 138648 138648 0 0.0
.data 2516 2516 0 0.0
.text 980792 980792 0 0.0
lock-app BRD4161A+wf200 (read/write) 1160120 1160120 0 0.0
.bss 158256 158256 0 0.0
.data 2020 2020 0 0.0
.text 999820 999820 0 0.0
window-app BRD4187C (read/write) 1139772 1139772 0 0.0
.bss 140064 140064 0 0.0
.data 2540 2540 0 0.0
.text 972572 972572 0 0.0
esp32 all-clusters-app c3devkit (read only) 1224290 1224288 -2 -0.0
(read/write) 1788614 1788614 0 0.0
.dram0.bss 76944 76944 0 0.0
.dram0.data 13840 13840 0 0.0
.flash.rodata 258184 258184 0 0.0
.flash.text 1224290 1224288 -2 -0.0
.iram0.text 65204 65204 0 0.0
m5stack (read only) 1234187 1234187 0 0.0
(read/write) 564412 564412 0 0.0
.dram0.bss 82320 82320 0 0.0
.dram0.data 34296 34296 0 0.0
.flash.rodata 315128 315128 0 0.0
.flash.text 1228803 1228803 0 0.0
.iram0.text 123939 123939 0 0.0
k32w contact k32w0+release (read/write) 661796 661796 0 0.0
.bss 77112 77112 0 0.0
.data 2104 2104 0 0.0
.text 563468 563468 0 0.0
light k32w0+release (read/write) 671800 671800 0 0.0
.bss 74912 74912 0 0.0
.data 2060 2060 0 0.0
.text 592100 592100 0 0.0
lock k32w0+release (read/write) 633356 633356 0 0.0
.bss 75672 75672 0 0.0
.data 2080 2080 0 0.0
.text 552876 552876 0 0.0
linux chip-tool-ipv6only arm64 (read only) 10433596 10433596 0 0.0
(read/write) 706353 706353 0 0.0
.bss 33905 33905 0 0.0
.data 2768 2768 0 0.0
.data.rel.ro 650672 650672 0 0.0
.dynamic 560 560 0 0.0
.got 13912 13912 0 0.0
.init 24 24 0 0.0
.init_array 208 208 0 0.0
.rodata 518220 518220 0 0.0
.text 8260020 8260020 0 0.0
thermostat-no-ble arm64 (read only) 2392092 2392092 0 0.0
(read/write) 143777 143777 0 0.0
.bss 55393 55393 0 0.0
.data 1816 1816 0 0.0
.data.rel.ro 77328 77328 0 0.0
.dynamic 560 560 0 0.0
.got 5176 5176 0 0.0
.init 24 24 0 0.0
.init_array 440 440 0 0.0
.rodata 144724 144724 0 0.0
.text 2004000 2004000 0 0.0
mbed lock-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2452336 2452336 0 0.0
.bss 215012 215012 0 0.0
.data 5872 5872 0 0.0
.text 1414980 1414980 0 0.0
nrfconnect all-clusters-app nrf52840dk_nrf52840 (read/write) 1187855 1187855 0 0.0
bss 145285 145285 0 0.0
rodata 144516 144516 0 0.0
text 816978 816982 4 0.0
all-clusters-minimal-app nrf52840dk_nrf52840 (read/write) 1167283 1167283 0 0.0
bss 144512 144512 0 0.0
rodata 136304 136304 0 0.0
text 805532 805532 0 0.0
psoc6 all-clusters cy8ckit_062s2_43012 (read only) 841968 841968 0 0.0
(read/write) 1746244 1746244 0 0.0
.ARM.attributes 46 46 0 0.0
.ARM.exidx 8 8 0 0.0
.bss 188712 188712 0 0.0
.comment 204 204 0 0.0
.copy.table 24 24 0 0.0
.cy_m0p_image 6216 6216 0 0.0
.cy_sharedmem 8 8 0 0.0
.data 2664 2664 0 0.0
.debug_abbrev 1235716 1235716 0 0.0
.debug_aranges 110704 110704 0 0.0
.debug_frame 371284 371284 0 0.0
.debug_info 27023893 27023893 0 0.0
.debug_line 3685941 3685941 0 0.0
.debug_loc 3603743 3603743 0 0.0
.debug_ranges 339544 339544 0 0.0
.debug_str 3431043 3431043 0 0.0
.heap 841968 841968 0 0.0
.noinit 148 148 0 0.0
.ramVectors 736 736 0 0.0
.shstrtab 288 288 0 0.0
.stab 156 156 0 0.0
.stabstr 335 335 0 0.0
.stack_dummy 4096 4096 0 0.0
.strtab 570257 570257 0 0.0
.symtab 421440 421440 0 0.0
.text 1546480 1546480 0 0.0
.zero.table 8 8 0 0.0
text 0 0 0 0.0
all-clusters-minimal cy8ckit_062s2_43012 (read only) 842704 842704 0 0.0
(read/write) 1688780 1688780 0 0.0
.ARM.attributes 46 46 0 0.0
.ARM.exidx 8 8 0 0.0
.bss 187976 187976 0 0.0
.comment 204 204 0 0.0
.copy.table 24 24 0 0.0
.cy_m0p_image 6216 6216 0 0.0
.cy_sharedmem 8 8 0 0.0
.data 2664 2664 0 0.0
.debug_abbrev 1227559 1227559 0 0.0
.debug_aranges 110176 110176 0 0.0
.debug_frame 374364 374364 0 0.0
.debug_info 26760523 26760524 1 0.0
.debug_line 3706925 3706925 0 0.0
.debug_loc 3591380 3591380 0 0.0
.debug_ranges 338160 338160 0 0.0
.debug_str 3420063 3420063 0 0.0
.heap 842704 842704 0 0.0
.noinit 148 148 0 0.0
.ramVectors 736 736 0 0.0
.shstrtab 288 288 0 0.0
.stab 156 156 0 0.0
.stabstr 335 335 0 0.0
.stack_dummy 4096 4096 0 0.0
.strtab 534346 534346 0 0.0
.symtab 407872 407872 0 0.0
.text 1489752 1489752 0 0.0
.zero.table 0 0 0 0.0
8 8 0 0.0
light cy8ckit_062s2_43012 (read only) 850888 850888 0 0.0
(read/write) 1606956 1606956 0 0.0
.ARM.attributes 46 46 0 0.0
.ARM.exidx 8 8 0 0.0
.bss 180000 180000 0 0.0
.comment 204 204 0 0.0
.copy.table 24 24 0 0.0
.cy_m0p_image 6216 6216 0 0.0
.cy_sharedmem 8 8 0 0.0
.data 2456 2456 0 0.0
.debug_abbrev 1062020 1062020 0 0.0
.debug_aranges 102376 102376 0 0.0
.debug_frame 344676 344676 0 0.0
.debug_info 22225723 22225722 -1 -0.0
.debug_line 3276050 3276050 0 0.0
.debug_loc 3288865 3288865 0 0.0
.debug_ranges 303440 303440 0 0.0
.debug_str 3225598 3225598 0 0.0
.heap 850888 850888 0 0.0
.noinit 148 148 0 0.0
.ramVectors 736 736 0 0.0
.shstrtab 288 288 0 0.0
.stab 156 156 0 0.0
.stabstr 335 335 0 0.0
.stack_dummy 4096 4096 0 0.0
.strtab 470671 470671 0 0.0
.symtab 376240 376240 0 0.0
.text 1416112 1416112 0 0.0
.zero.table 0 0 0 0.0
8 8 0 0.0
lock cy8ckit_062s2_43012 (read only) 845896 845896 0 0.0
(read/write) 1640964 1640964 0 0.0
.ARM.attributes 46 46 0 0.0
.ARM.exidx 8 8 0 0.0
.bss 184976 184976 0 0.0
.comment 204 204 0 0.0
.copy.table 24 24 0 0.0
.cy_m0p_image 6216 6216 0 0.0
.cy_sharedmem 8 8 0 0.0
.data 2472 2472 0 0.0
.debug_abbrev 1063995 1063995 0 0.0
.debug_aranges 102776 102776 0 0.0
.debug_frame 346552 346552 0 0.0
.debug_info 22459349 22459349 0 0.0
.debug_line 3273170 3273170 0 0.0
.debug_loc 3316718 3316718 0 0.0
.debug_ranges 305400 305400 0 0.0
.debug_str 3244969 3244969 0 0.0
.heap 845896 845896 0 0.0
.noinit 148 148 0 0.0
.ramVectors 736 736 0 0.0
.shstrtab 288 288 0 0.0
.stab 156 156 0 0.0
.stabstr 335 335 0 0.0
.stack_dummy 4096 4096 0 0.0
.strtab 473074 473074 0 0.0
.symtab 377936 377936 0 0.0
.text 1445128 1445128 0 0.0
.zero.table 0 0 0 0.0
8 8 0 0.0
qpg lighting-app qpg6105+debug (read/write) 1149312 1149312 0 0.0
.bss 109860 109860 0 0.0
.data 848 848 0 0.0
.text 596412 596412 0 0.0
lock-app qpg6105+debug (read/write) 1115060 1115060 0 0.0
.bss 106332 106332 0 0.0
.data 836 836 0 0.0
.text 562156 562156 0 0.0
telink all-clusters-app tlsr9518adk80d (read/write) 937352 937352 0 0.0
bss 81620 81620 0 0.0
noinit 43440 43440 0 0.0
text 648702 648702 0 0.0
all-clusters-minimal-app tlsr9518adk80d (read/write) 875344 875344 0 0.0
bss 80844 80844 0 0.0
noinit 43440 43440 0 0.0
text 612688 612690 2 0.0
light-switch-app tlsr9518adk80d (read/write) 790700 790700 0 0.0
bss 72468 72468 0 0.0
noinit 43520 43520 0 0.0
text 554152 554150 -2 -0.0
lighting-app tlsr9518adk80d (read/write) 874924 874924 0 0.0
bss 82232 82232 0 0.0
noinit 43520 43520 0 0.0
text 624116 624116 0 0.0
ota-requestor-app tlsr9518adk80d (read/write) 805192 805192 0 0.0
bss 74040 74040 0 0.0
noinit 43520 43520 0 0.0
text 565532 565532 0 0.0

@bzbarsky-apple bzbarsky-apple enabled auto-merge (squash) November 14, 2022 16:54
@bzbarsky-apple bzbarsky-apple merged commit b87a86b into project-chip:master Nov 14, 2022
@bzbarsky-apple bzbarsky-apple deleted the callback-bridge-avoid-double-delete branch November 14, 2022 17:49
adbridge pushed a commit to ARM-software/connectedhomeip that referenced this pull request Nov 18, 2022
…ors out. (project-chip#23557)

* Avoid double-delete when a Darwin subscribeAttribute subscription errors out.

Right now Darwin subscribeAttribute subscriptions do not support turning off auto-resubscribe, so never error out.  But if we were to add that, we would end up with double delete: once when the error happens, and once from OnDone.

This fix:

1) Ensures that we don't flag callback bridges as mKeepAlive until we have
   successfully sent a subscribe request.
2) Stops deleting on error if mKeepAlive is true.
3) Ensures the delete of the bridge from OnDone does not happen until after
   we have finished using the bridge object (e.g. to handle already-queued data
   or error notifications).  We do this by queueing the delete to the same
   dispatch queue as the data/error notifications.

* Address review comment.
adbridge pushed a commit to ARM-software/connectedhomeip that referenced this pull request Nov 18, 2022
…ors out. (project-chip#23557)

* Avoid double-delete when a Darwin subscribeAttribute subscription errors out.

Right now Darwin subscribeAttribute subscriptions do not support turning off auto-resubscribe, so never error out.  But if we were to add that, we would end up with double delete: once when the error happens, and once from OnDone.

This fix:

1) Ensures that we don't flag callback bridges as mKeepAlive until we have
   successfully sent a subscribe request.
2) Stops deleting on error if mKeepAlive is true.
3) Ensures the delete of the bridge from OnDone does not happen until after
   we have finished using the bridge object (e.g. to handle already-queued data
   or error notifications).  We do this by queueing the delete to the same
   dispatch queue as the data/error notifications.

* Address review comment.
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.

4 participants