Commit 75ff93a
Bluetooth: Classic: HFP: Fix SCO conn cannot be released issue
There is an issue found that the sco conn cannot be released when the
SCO has been disconnected. The sco conn count is referred in the sco
connected callback due to the `sco_conn` is NULL while `sco_conn`
should not be NULL when the sco connected callback is triggered.
It is a race condition issue where the sco connected callback is
triggered before `sco_conn` is updated. The sco conn reference count
has been referred incorrectly, actually it should not be referred.
Replace direct pointer access to `sco_conn` with atomic operations to
prevent race conditions in concurrent SCO connection scenarios.
If the value of `sco_conn` is not NULL when trying to set the return
value of `bt_conn_create_sco()` to `sco_conn`, it means the race
condition occurs. In this situation, discount the sco conn reference
count to fix the issue.
Signed-off-by: Lyle Zhu <[email protected]>1 parent 764f0d1 commit 75ff93a
File tree
4 files changed
+79
-44
lines changed- subsys/bluetooth/host/classic
4 files changed
+79
-44
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
772 | 772 | | |
773 | 773 | | |
774 | 774 | | |
775 | | - | |
| 775 | + | |
776 | 776 | | |
777 | 777 | | |
778 | 778 | | |
| |||
785 | 785 | | |
786 | 786 | | |
787 | 787 | | |
788 | | - | |
789 | | - | |
790 | | - | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
791 | 791 | | |
792 | 792 | | |
793 | 793 | | |
| |||
1450 | 1450 | | |
1451 | 1451 | | |
1452 | 1452 | | |
1453 | | - | |
1454 | | - | |
| 1453 | + | |
| 1454 | + | |
1455 | 1455 | | |
1456 | 1456 | | |
1457 | 1457 | | |
| |||
1462 | 1462 | | |
1463 | 1463 | | |
1464 | 1464 | | |
| 1465 | + | |
1465 | 1466 | | |
1466 | 1467 | | |
1467 | 1468 | | |
1468 | 1469 | | |
1469 | 1470 | | |
1470 | | - | |
1471 | | - | |
1472 | | - | |
| 1471 | + | |
| 1472 | + | |
| 1473 | + | |
1473 | 1474 | | |
1474 | 1475 | | |
1475 | 1476 | | |
| |||
1506 | 1507 | | |
1507 | 1508 | | |
1508 | 1509 | | |
| 1510 | + | |
| 1511 | + | |
| 1512 | + | |
1509 | 1513 | | |
1510 | 1514 | | |
1511 | 1515 | | |
1512 | | - | |
1513 | | - | |
| 1516 | + | |
| 1517 | + | |
| 1518 | + | |
| 1519 | + | |
1514 | 1520 | | |
1515 | | - | |
| 1521 | + | |
1516 | 1522 | | |
1517 | | - | |
1518 | | - | |
1519 | | - | |
1520 | | - | |
| 1523 | + | |
| 1524 | + | |
| 1525 | + | |
| 1526 | + | |
| 1527 | + | |
| 1528 | + | |
| 1529 | + | |
| 1530 | + | |
| 1531 | + | |
| 1532 | + | |
| 1533 | + | |
| 1534 | + | |
| 1535 | + | |
| 1536 | + | |
| 1537 | + | |
| 1538 | + | |
| 1539 | + | |
| 1540 | + | |
| 1541 | + | |
| 1542 | + | |
1521 | 1543 | | |
| 1544 | + | |
1522 | 1545 | | |
1523 | | - | |
1524 | | - | |
1525 | | - | |
1526 | | - | |
1527 | | - | |
1528 | | - | |
1529 | | - | |
1530 | | - | |
| 1546 | + | |
| 1547 | + | |
| 1548 | + | |
| 1549 | + | |
| 1550 | + | |
1531 | 1551 | | |
1532 | 1552 | | |
1533 | 1553 | | |
1534 | | - | |
| 1554 | + | |
1535 | 1555 | | |
1536 | 1556 | | |
1537 | 1557 | | |
| |||
1544 | 1564 | | |
1545 | 1565 | | |
1546 | 1566 | | |
1547 | | - | |
| 1567 | + | |
1548 | 1568 | | |
1549 | 1569 | | |
1550 | 1570 | | |
| |||
2702 | 2722 | | |
2703 | 2723 | | |
2704 | 2724 | | |
2705 | | - | |
| 2725 | + | |
2706 | 2726 | | |
2707 | 2727 | | |
2708 | 2728 | | |
| |||
4300 | 4320 | | |
4301 | 4321 | | |
4302 | 4322 | | |
4303 | | - | |
4304 | | - | |
4305 | | - | |
| 4323 | + | |
| 4324 | + | |
4306 | 4325 | | |
4307 | 4326 | | |
4308 | 4327 | | |
| |||
5127 | 5146 | | |
5128 | 5147 | | |
5129 | 5148 | | |
5130 | | - | |
| 5149 | + | |
5131 | 5150 | | |
5132 | 5151 | | |
5133 | 5152 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
291 | 291 | | |
292 | 292 | | |
293 | 293 | | |
294 | | - | |
| 294 | + | |
295 | 295 | | |
296 | 296 | | |
297 | 297 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3446 | 3446 | | |
3447 | 3447 | | |
3448 | 3448 | | |
3449 | | - | |
3450 | | - | |
| 3449 | + | |
| 3450 | + | |
3451 | 3451 | | |
3452 | 3452 | | |
3453 | 3453 | | |
| |||
3458 | 3458 | | |
3459 | 3459 | | |
3460 | 3460 | | |
| 3461 | + | |
3461 | 3462 | | |
3462 | 3463 | | |
3463 | 3464 | | |
3464 | 3465 | | |
3465 | 3466 | | |
3466 | | - | |
3467 | | - | |
3468 | | - | |
| 3467 | + | |
| 3468 | + | |
| 3469 | + | |
3469 | 3470 | | |
3470 | 3471 | | |
3471 | 3472 | | |
| |||
3512 | 3513 | | |
3513 | 3514 | | |
3514 | 3515 | | |
| 3516 | + | |
3515 | 3517 | | |
| 3518 | + | |
3516 | 3519 | | |
3517 | 3520 | | |
3518 | 3521 | | |
| |||
3524 | 3527 | | |
3525 | 3528 | | |
3526 | 3529 | | |
3527 | | - | |
3528 | | - | |
| 3530 | + | |
| 3531 | + | |
| 3532 | + | |
| 3533 | + | |
| 3534 | + | |
| 3535 | + | |
| 3536 | + | |
| 3537 | + | |
| 3538 | + | |
| 3539 | + | |
| 3540 | + | |
| 3541 | + | |
| 3542 | + | |
| 3543 | + | |
| 3544 | + | |
| 3545 | + | |
3529 | 3546 | | |
3530 | 3547 | | |
3531 | 3548 | | |
| |||
3544 | 3561 | | |
3545 | 3562 | | |
3546 | 3563 | | |
3547 | | - | |
| 3564 | + | |
3548 | 3565 | | |
3549 | 3566 | | |
3550 | 3567 | | |
| |||
4487 | 4504 | | |
4488 | 4505 | | |
4489 | 4506 | | |
4490 | | - | |
4491 | | - | |
4492 | | - | |
| 4507 | + | |
| 4508 | + | |
4493 | 4509 | | |
4494 | 4510 | | |
4495 | 4511 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
215 | 215 | | |
216 | 216 | | |
217 | 217 | | |
218 | | - | |
| 218 | + | |
219 | 219 | | |
220 | 220 | | |
221 | 221 | | |
| |||
0 commit comments