Summary: | ASTERISK-29887: app_confbridge: CONFBRIDGE template modifications are wrongly discarded in certain bridge joins | ||
Reporter: | N A (InterLinked) | Labels: | |
Date Opened: | 2022-01-30 17:27:45.000-0600 | Date Closed: | 2022-01-30 18:13:48.000-0600 |
Priority: | Minor | Regression? | |
Status: | Closed/Complete | Components: | Applications/app_confbridge |
Versions: | 18.9.0 | Frequency of Occurrence | Constant |
Related Issues: | |||
Environment: | Debian 10 and Debian 11 | Attachments: | ( 0) ASTERISK-29887.txt |
Description: | I have encountered some strange behavior where if channels join a confbridge before a certain channel, all the template settings for that ConfBridge seem to disappear, and furthermore, it doesn't seem like they can be reapplied, as if the channel datastore has become corrupted in some way.
Expected behavior: Set(CONFBRIDGE(bridge,sound_wait_for_leader)=silence/3) will override the sound_wait_for_leader prompt for the next ConfBridge join on that channel. Actual behavior: If the timing is right, all these bridge settings just completely disappear by the time the channel joins the confbridge. The result is that if you dump the contents of the override for that particular var in app_confbridge.c, it's empty, so of course it then goes and plays the default. I don't know yet if somehow the datastore is wrongly disappearing yet, but something is majorly wrong here. I can't articulate all the aspects of this, but attached is a fairly simple minimally reproducible example that seems to replicate these cases accurately every time. This readily reproduces on multiple systems. Currently, there doesn't seem to be any workaround for this, except for inflating the timing on all other channels with Wait so that it is guaranteed that the first channel always joins the confbridge first. It seems that in certain circumstances, if something else joins the bridge first, then all the template settings that were applied to that first channel disappear into oblivion. | ||
Comments: | By: Asterisk Team (asteriskteam) 2022-01-30 17:27:46.287-0600 Thanks for creating a report! The issue has entered the triage process. That means the issue will wait in this status until a Bug Marshal has an opportunity to review the issue. Once the issue has been reviewed you will receive comments regarding the next steps towards resolution. Please note that log messages and other files should not be sent to the Sangoma Asterisk Team unless explicitly asked for. All files should be placed on this issue in a sanitized fashion as needed. A good first step is for you to review the [Asterisk Issue Guidelines|https://wiki.asterisk.org/wiki/display/AST/Asterisk+Issue+Guidelines] if you haven't already. The guidelines detail what is expected from an Asterisk issue report. Then, if you are submitting a patch, please review the [Patch Contribution Process|https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process]. Please note that once your issue enters an open state it has been accepted. As Asterisk is an open source project there is no guarantee or timeframe on when your issue will be looked into. If you need expedient resolution you will need to find and pay a suitable developer. Asking for an update on your issue will not yield any progress on it and will not result in a response. All updates are posted to the issue when they occur. Please note that by submitting data, code, or documentation to Sangoma through JIRA, you accept the Terms of Use present at [https://www.asterisk.org/terms-of-use/|https://www.asterisk.org/terms-of-use/]. By: N A (InterLinked) 2022-01-30 17:31:15.796-0600 Examples and CLI output attached. By: Joshua C. Colp (jcolp) 2022-01-30 18:04:01.406-0600 I don't believe this is a bug, but the way it works. The bridge profile of the first channel that joins the ConfBridge is what configures the ConfBridge, and is the profile that is used. You can't have differing bridge profiles between channels - only user profiles. By: Joshua C. Colp (jcolp) 2022-01-30 18:04:57.028-0600 That is, if there's different paths for joining the ConfBridge then each should configure the bridge profile the same way. By: N A (InterLinked) 2022-01-30 18:11:46.291-0600 Thanks, that would explain things then... some testing confirms exactly what you said. A bit clunky to have to do that for every possible fork, but I guess that's what I'll have to do for now. Some of these really seem like they should be user options, not bridge options (most of the prompt-related ones, for instance), but I guess that's something for down the line... Unrelated, but in the process, I was toying with making the CONFBRIDGE function readable so I could see what setting is set at any given time. Is there some way to enumerate an aco and print out everything appropriately? It seems like there would be, since it knows what's a boolean flag, what's a string, etc. and registration makes use of that. But looking through existing code, anything that prints stuff out just seems to be a giant if/else if/else if... else tree, which would indicate maybe this isn't done for some reason. By: Joshua C. Colp (jcolp) 2022-01-30 18:13:38.016-0600 No, ACO doesn't have such functionality. |