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 incorrect order for Lock statements and Exit statements #19687

Merged
merged 1 commit into from
Jun 16, 2022

Conversation

mkardous-silabs
Copy link
Contributor

Problem

A VerifyOrExit statement was being called before the lock statement. If the statement was false and jumped to exit, the unlock statement was being called even if the lock statement was not called.
This caused FreeRTOS asserts when trying to complete the unlock operation.

Change overview

Refactor error calls to return instead of going to the exit statement.
Place ReturnError statements before Lock statement to avoid unnecessary Lock / Unlock operations.

Testing

Test Run with efr32 Mg24 to validate the FreeRTOS assert doesn't happen.

@mkardous-silabs mkardous-silabs changed the title Fix incorrect order for Lock statement and Exit statement Fix incorrect order for Lock statements and Exit statements Jun 16, 2022
@github-actions
Copy link

github-actions bot commented Jun 16, 2022

PR #19687: Size comparison from 3963c1b to bd3eb44

Increases (10 builds for cc13x2_26x2, efr32, telink)
platform target config section 3963c1b bd3eb44 change % change
cc13x2_26x2 all-clusters-app LP_CC2652R7 (read/write) 191300 191316 16 0.0
lock-ftd LP_CC2652R7 (read/write) 150492 150508 16 0.0
pump-app LP_CC2652R7 (read/write) 170428 170444 16 0.0
pump-controller-app LP_CC2652R7 (read/write) 179568 179584 16 0.0
shell LP_CC2652R7 (read/write) 157388 157404 16 0.0
efr32 lighting-app BRD4161A (read only) 924008 924024 16 0.0
.text 924000 924016 16 0.0
BRD4161A+rpc (read only) 959712 959728 16 0.0
.text 959704 959720 16 0.0
window-app BRD4161A (read only) 909104 909120 16 0.0
.text 909096 909112 16 0.0
telink light-switch-app tlsr9518adk80d (read/write) 789016 789024 8 0.0
text 559604 559614 10 0.0
lighting-app tlsr9518adk80d (read/write) 808728 808736 8 0.0
text 576068 576078 10 0.0
Decreases (16 builds for cc13x2_26x2, cyw30739, efr32, esp32, k32w, nrfconnect)
platform target config section 3963c1b bd3eb44 change % change
cc13x2_26x2 all-clusters-app LP_CC2652R7 (read only) 659563 659547 -16 -0.0
.text 572168 572152 -16 -0.0
all-clusters-minimal-app LP_CC2652R7 (read only) 648031 648007 -24 -0.0
.text 557304 557280 -24 -0.0
lock-ftd LP_CC2652R7 (read only) 690483 690467 -16 -0.0
.text 590836 590820 -16 -0.0
lock-mtd LP_CC2652R7 (read only) 639891 639875 -16 -0.0
.text 540356 540340 -16 -0.0
pump-app LP_CC2652R7 (read only) 671435 671419 -16 -0.0
.text 583692 583676 -16 -0.0
pump-controller-app LP_CC2652R7 (read only) 662423 662407 -16 -0.0
.text 576756 576740 -16 -0.0
shell LP_CC2652R7 (read only) 688970 688954 -16 -0.0
.text 579000 578984 -16 -0.0
cyw30739 light cyw930739m2evb_01 (read/write) 612770 612754 -16 -0.0
.app_xip_area 469436 469420 -16 -0.0
lock cyw930739m2evb_01 (read/write) 610078 610062 -16 -0.0
.app_xip_area 466568 466552 -16 -0.0
ota-requestor-no-progress-logging cyw930739m2evb_01 (read/write) 616078 616062 -16 -0.0
.app_xip_area 473632 473616 -16 -0.0
efr32 lock-app BRD4161A+wf200 (read only) 965524 965508 -16 -0.0
.text 965516 965500 -16 -0.0
esp32 all-clusters-app c3devkit (read only) 1012634 1012632 -2 -0.0
.flash.text 1012634 1012632 -2 -0.0
k32w light k32w061+release (read/write) 658908 658892 -16 -0.0
.text 582360 582344 -16 -0.0
lock k32w061+release (read/write) 720864 720848 -16 -0.0
.text 643868 643852 -16 -0.0
nrfconnect all-clusters-app nrf52840dk_nrf52840 (read/write) 1198715 1198699 -16 -0.0
text 822532 822516 -16 -0.0
all-clusters-minimal-app nrf52840dk_nrf52840 (read/write) 1146687 1146671 -16 -0.0
text 794748 794732 -16 -0.0
Full report (41 builds for cc13x2_26x2, cyw30739, efr32, esp32, k32w, linux, mbed, nrfconnect, p6, telink)
platform target config section 3963c1b bd3eb44 change % change
cc13x2_26x2 all-clusters-app LP_CC2652R7 (read only) 659563 659547 -16 -0.0
(read/write) 191300 191316 16 0.0
.bss 73756 73756 0 0.0
.data 3356 3356 0 0.0
.rodata 87083 87083 0 0.0
.text 572168 572152 -16 -0.0
all-clusters-minimal-app LP_CC2652R7 (read only) 648031 648007 -24 -0.0
(read/write) 157316 157316 0 0.0
.bss 73044 73044 0 0.0
.data 3356 3356 0 0.0
.rodata 90407 90407 0 0.0
.text 557304 557280 -24 -0.0
lock-ftd LP_CC2652R7 (read only) 690483 690467 -16 -0.0
(read/write) 150492 150508 16 0.0
.bss 70756 70756 0 0.0
.data 3280 3280 0 0.0
.rodata 99163 99163 0 0.0
.text 590836 590820 -16 -0.0
lock-mtd LP_CC2652R7 (read only) 639891 639875 -16 -0.0
(read/write) 143888 143888 0 0.0
.bss 66492 66492 0 0.0
.data 3280 3280 0 0.0
.rodata 99043 99043 0 0.0
.text 540356 540340 -16 -0.0
pump-app LP_CC2652R7 (read only) 671435 671419 -16 -0.0
(read/write) 170428 170444 16 0.0
.bss 70876 70876 0 0.0
.data 3280 3280 0 0.0
.rodata 87259 87259 0 0.0
.text 583692 583676 -16 -0.0
pump-controller-app LP_CC2652R7 (read only) 662423 662407 -16 -0.0
(read/write) 179568 179584 16 0.0
.bss 71004 71004 0 0.0
.data 3276 3276 0 0.0
.rodata 85183 85183 0 0.0
.text 576756 576740 -16 -0.0
shell LP_CC2652R7 (read only) 688970 688954 -16 -0.0
(read/write) 157388 157404 16 0.0
.bss 76052 76052 0 0.0
.data 3360 3360 0 0.0
.rodata 109658 109658 0 0.0
.text 579000 578984 -16 -0.0
cyw30739 light cyw930739m2evb_01 (read/write) 612770 612754 -16 -0.0
.app_xip_area 469436 469420 -16 -0.0
.bss 86288 86288 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) 610078 610062 -16 -0.0
.app_xip_area 466568 466552 -16 -0.0
.bss 86464 86464 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) 616078 616062 -16 -0.0
.app_xip_area 473632 473616 -16 -0.0
.bss 85456 85456 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 only) 924008 924024 16 0.0
(read/write) 132416 132416 0 0.0
.bss 130336 130336 0 0.0
.data 2080 2080 0 0.0
.text 924000 924016 16 0.0
BRD4161A+rpc (read only) 959712 959728 16 0.0
(read/write) 149296 149296 0 0.0
.bss 147008 147008 0 0.0
.data 2284 2284 0 0.0
.text 959704 959720 16 0.0
BRD4161A+rs911x (read only) 799092 799092 0 0.0
(read/write) 128692 128692 0 0.0
.bss 126604 126604 0 0.0
.data 2088 2088 0 0.0
.text 799084 799084 0 0.0
lock-app BRD4161A+wf200 (read only) 965524 965508 -16 -0.0
(read/write) 129068 129068 0 0.0
.bss 126980 126980 0 0.0
.data 2088 2088 0 0.0
.text 965516 965500 -16 -0.0
window-app BRD4161A (read only) 909104 909120 16 0.0
(read/write) 132520 132520 0 0.0
.bss 130408 130408 0 0.0
.data 2108 2108 0 0.0
.text 909096 909112 16 0.0
esp32 all-clusters-app c3devkit (read only) 1012634 1012632 -2 -0.0
(read/write) 1482898 1482898 0 0.0
.dram0.bss 69392 69392 0 0.0
.dram0.data 14632 14632 0 0.0
.flash.rodata 213440 213440 0 0.0
.flash.text 1012634 1012632 -2 -0.0
.iram0.text 62902 62902 0 0.0
m5stack (read only) 1067171 1067171 0 0.0
(read/write) 485016 485016 0 0.0
.dram0.bss 74912 74912 0 0.0
.dram0.data 34144 34144 0 0.0
.flash.rodata 243964 243964 0 0.0
.flash.text 1061787 1061787 0 0.0
.iram0.text 123267 123267 0 0.0
k32w light k32w061+release (read/write) 658908 658892 -16 -0.0
.bss 68756 68756 0 0.0
.data 1992 1992 0 0.0
.text 582360 582344 -16 -0.0
lock k32w061+release (read/write) 720864 720848 -16 -0.0
.bss 69196 69196 0 0.0
.data 2000 2000 0 0.0
.text 643868 643852 -16 -0.0
linux all-clusters-app debug (read only) 2929609 2929609 0 0.0
(read/write) 188656 188656 0 0.0
.bss 95744 95744 0 0.0
.data 2048 2048 0 0.0
.data.rel.ro 84664 84664 0 0.0
.dynamic 608 608 0 0.0
.got 4536 4536 0 0.0
.init 27 27 0 0.0
.init_array 1032 1032 0 0.0
.rodata 259421 259421 0 0.0
.text 2493746 2493746 0 0.0
all-clusters-minimal-app debug (read only) 2783321 2783321 0 0.0
(read/write) 180560 180560 0 0.0
.bss 95072 95072 0 0.0
.data 2048 2048 0 0.0
.data.rel.ro 77304 77304 0 0.0
.dynamic 608 608 0 0.0
.got 4488 4488 0 0.0
.init 27 27 0 0.0
.init_array 1032 1032 0 0.0
.rodata 260957 260957 0 0.0
.text 2348098 2348098 0 0.0
bridge-app debug+rpc (read only) 2285953 2285953 0 0.0
(read/write) 159424 159424 0 0.0
.bss 83136 83136 0 0.0
.data 3792 3792 0 0.0
.data.rel.ro 66728 66728 0 0.0
.dynamic 608 608 0 0.0
.got 4392 4392 0 0.0
.init 27 27 0 0.0
.init_array 728 728 0 0.0
.rodata 194304 194304 0 0.0
.text 1930562 1930562 0 0.0
chip-tool debug (read only) 10140077 10140077 0 0.0
(read/write) 609544 609544 0 0.0
.bss 24352 24352 0 0.0
.data 1088 1088 0 0.0
.data.rel.ro 577808 577808 0 0.0
.dynamic 624 624 0 0.0
.got 5008 5008 0 0.0
.init 27 27 0 0.0
.init_array 640 640 0 0.0
.rodata 508725 508725 0 0.0
.text 8225621 8225621 0 0.0
chip-tool-no-interactive-ipv6only arm64 (read only) 9881836 9881836 0 0.0
(read/write) 674225 674225 0 0.0
.bss 42641 42641 0 0.0
.data 1152 1152 0 0.0
.data.rel.ro 613208 613208 0 0.0
.dynamic 528 528 0 0.0
.got 13416 13416 0 0.0
.init 24 24 0 0.0
.init_array 192 192 0 0.0
.rodata 472300 472300 0 0.0
.text 7873108 7873108 0 0.0
lighting-app debug+rpc (read only) 2518705 2518705 0 0.0
(read/write) 163448 163448 0 0.0
.bss 83616 83616 0 0.0
.data 2064 2064 0 0.0
.data.rel.ro 71896 71896 0 0.0
.dynamic 608 608 0 0.0
.got 4424 4424 0 0.0
.init 27 27 0 0.0
.init_array 816 816 0 0.0
.rodata 210056 210056 0 0.0
.text 2138946 2138946 0 0.0
lock-app debug (read only) 2457417 2457417 0 0.0
(read/write) 158096 158096 0 0.0
.bss 82016 82016 0 0.0
.data 1680 1680 0 0.0
.data.rel.ro 68568 68568 0 0.0
.dynamic 608 608 0 0.0
.got 4424 4424 0 0.0
.init 27 27 0 0.0
.init_array 776 776 0 0.0
.rodata 223752 223752 0 0.0
.text 2069362 2069362 0 0.0
ota-provider-app debug (read only) 2295313 2295313 0 0.0
(read/write) 152232 152232 0 0.0
.bss 81696 81696 0 0.0
.data 1912 1912 0 0.0
.data.rel.ro 62840 62840 0 0.0
.dynamic 608 608 0 0.0
.got 4488 4488 0 0.0
.init 27 27 0 0.0
.init_array 672 672 0 0.0
.rodata 199928 199928 0 0.0
.text 1933234 1933234 0 0.0
ota-requestor-app debug (read only) 2411025 2411025 0 0.0
(read/write) 158976 158976 0 0.0
.bss 84000 84000 0 0.0
.data 2200 2200 0 0.0
.data.rel.ro 66936 66936 0 0.0
.dynamic 608 608 0 0.0
.got 4480 4480 0 0.0
.init 27 27 0 0.0
.init_array 728 728 0 0.0
.rodata 203616 203616 0 0.0
.text 2037026 2037026 0 0.0
shell debug (read only) 2603153 2603153 0 0.0
(read/write) 219288 219288 0 0.0
.bss 134504 134504 0 0.0
.data 1232 1232 0 0.0
.data.rel.ro 77808 77808 0 0.0
.dynamic 608 608 0 0.0
.got 4168 4168 0 0.0
.init 27 27 0 0.0
.init_array 936 936 0 0.0
.rodata 229746 229746 0 0.0
.text 2213650 2213650 0 0.0
thermostat-no-ble arm64 (read only) 2570700 2570700 0 0.0
(read/write) 192193 192193 0 0.0
.bss 99489 99489 0 0.0
.data 1688 1688 0 0.0
.data.rel.ro 82928 82928 0 0.0
.dynamic 528 528 0 0.0
.got 5072 5072 0 0.0
.init 24 24 0 0.0
.init_array 400 400 0 0.0
.rodata 163324 163324 0 0.0
.text 2168256 2168256 0 0.0
tv-app debug (read only) 3067169 3067169 0 0.0
(read/write) 289352 289352 0 0.0
.bss 199240 199240 0 0.0
.data 4656 4656 0 0.0
.data.rel.ro 79016 79016 0 0.0
.dynamic 608 608 0 0.0
.got 4840 4840 0 0.0
.init 27 27 0 0.0
.init_array 952 952 0 0.0
.rodata 245664 245664 0 0.0
.text 2634642 2634642 0 0.0
tv-casting-app debug (read only) 5550025 5550025 0 0.0
(read/write) 199960 199960 0 0.0
.bss 88072 88072 0 0.0
.data 2480 2480 0 0.0
.data.rel.ro 103184 103184 0 0.0
.dynamic 608 608 0 0.0
.got 4712 4712 0 0.0
.init 27 27 0 0.0
.init_array 872 872 0 0.0
.rodata 341193 341193 0 0.0
.text 4932386 4932386 0 0.0
mbed lock-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2437720 2437720 0 0.0
.bss 208204 208204 0 0.0
.data 5864 5864 0 0.0
.text 1400364 1400364 0 0.0
nrfconnect all-clusters-app nrf52840dk_nrf52840 (read/write) 1198715 1198699 -16 -0.0
bss 141598 141598 0 0.0
rodata 155676 155676 0 0.0
text 822532 822516 -16 -0.0
all-clusters-minimal-app nrf52840dk_nrf52840 (read/write) 1146687 1146671 -16 -0.0
bss 140850 140850 0 0.0
rodata 132200 132200 0 0.0
text 794748 794732 -16 -0.0
p6 all-clusters-app default (read/write) 2553568 2553568 0 0.0
.bss 143384 143384 0 0.0
.data 2776 2776 0 0.0
.text 1511832 1511832 0 0.0
all-clusters-minimal-app default (read/write) 2499416 2499416 0 0.0
.bss 142664 142664 0 0.0
.data 2776 2776 0 0.0
.text 1457680 1457680 0 0.0
light-app default (read/write) 2430160 2430160 0 0.0
.bss 134744 134744 0 0.0
.data 2592 2592 0 0.0
.text 1388424 1388424 0 0.0
lock-app default (read/write) 2450784 2450784 0 0.0
.bss 134568 134568 0 0.0
.data 2600 2600 0 0.0
.text 1409048 1409048 0 0.0
telink light-switch-app tlsr9518adk80d (read/write) 789016 789024 8 0.0
bss 69892 69892 0 0.0
noinit 40416 40416 0 0.0
text 559604 559614 10 0.0
lighting-app tlsr9518adk80d (read/write) 808728 808736 8 0.0
bss 70140 70140 0 0.0
noinit 40416 40416 0 0.0
text 576068 576078 10 0.0

Copy link
Contributor

@andy31415 andy31415 left a comment

Choose a reason for hiding this comment

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

We should use RAII for stack locking to avoid this kind of bugs.

@andy31415 andy31415 merged commit 12c94cd into project-chip:master Jun 16, 2022
@mkardous-silabs mkardous-silabs deleted the fix/lock_mutex_order branch June 20, 2022 19:37
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.

6 participants