-
Notifications
You must be signed in to change notification settings - Fork 3k
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 type collision by renaming callback variable #2688
Conversation
Build jobs are failing due build error "arm_hal_timer.cpp:50:5: error: reference to 'callback' is ambiguous". Fix the build error by renaming callback to arm_hal_callback to avoid collision with callback defined in ./mbed-os/hal/api/Callback.h
Originally this change was made to ARMmbed/nanostack-hal-mbed-cmsis-rtos#12 but that repository is going to be retired. @kjbracey-arm would you please check again. |
I'm fine with it, but can't help but feel that mbed.h adding "callback" into the global namespace is somewhat asking for trouble with a wide range of possible applications and libraries. (Could there be some way to stop mbed.h doing "using namespace mbed")? |
@geky @sg- I think this alternative is the easiest to fix the failure (compare to renaming callback in the Callback API, or changing mbed.h file). What do you think?
I personally also would like to remove |
related issue #2653 |
Another possible fix would be to take advantages of the C++ namespace rules. There is two way to do it:
static void timer_thread(const void *)
{
for (;;) {
osSignalWait(1, osWaitForever);
// !!! We don't do our own enter/exit critical - we rely on callback
// doing it (ns_timer_interrupt_handler does)
//platform_enter_critical();
// USE CALLBACK FROM THE GLOBAL NAMESPACE
::callback();
//platform_exit_critical();
}
}
// Not called while running, fortunately
void platform_timer_set_cb(void (*new_fp)(void))
{
// USE CALLBACK FROM THE GLOBAL NAMESPACE
::callback= new_fp;
}
//#include "mbed.h"
// DO NOT import mbed.h, pick only the symbols needed
// Include timeout and timer instead
#include "Timeout.h"
#include "Timer.h"
#include "platform/arm_hal_timer.h"
#include "platform/arm_hal_interrupt.h"
// bring useful symbols in the global namespace
using mbed::Timeout;
using mbed::Timer; |
I think this can be merged given it was previously but we also have a lot of work to do in general to rid this. More to come on this soon. |
/morph test |
Result: SUCCESSYour command has finished executing! Here's what you wrote!
Outputmbed Build Number: 855 All builds and test passed! |
@pan- Does
|
As @pan- highlighted this brings a question if mbed-os files should include mbed header file. I would say no, go with his second proposal, to include only what is required. Thoughts? |
@kjbracey-arm The standard can be confusing on this point. The section 7.4 explain this:
More importantly:
And finally there is an example of this in the standard: namespace D {
int d1 ;
void f( char );
}
using namespace D;
int d1 ; // OK: no conflict with D::d1
namespace E {
int e ;
void f( int );
}
namespace D { // namespace extension
int d2 ;
using namespace E;
void f( int );
}
void f ()
{
d1++; // error: ambiguous ::d1 or D::d1?
::d1++; // OK
D::d1++; //OK
d2++; // OK: D::d2
e++; // OK: E::e
f(1); // error: ambiguous: D::f(int) or E::f(int)?
f('a’); // OK: D::f(char)
} |
Right, I didn't know that distinction. So after But after |
@0xc0170 Explicitly stating which name from another namespace is used is the best way to minimize name collision. In python we all know that we shouldn't write There is an old but still interesting article from Herb Sutter explaining how to properly use namespaces: http://www.gotw.ca/publications/migrating_to_namespaces.htm . @kjbracey-arm Correct, that's the big difference between |
I'm okay with this, as a local change, it's just as reasonable as the suggestions above. But #2663 seems like it would solve the problem more generally. If that was in, this wouldn't need to be. |
Will land this and something that looks like #2663 will also land for mbed OS. |
…..225a4af 225a4af Remove files from tests folder 58d2c8f Merge remote-tracking branch 'origin/release_internal' into release_external 921b4b3 Wi-SUN FAN 1.1 dynamic MDR data request enabler b8722e8 Corrected BR removing of waiting list entry when supplicant is in key storage 0d54d7a Adjust trace levels (ARMmbed#2692) 681d9ea Added reset for pan id and version to BR network start 30d4fb2 Renaming and cleaning ws bootstrap (ARMmbed#2688) e0da19d Add Wi-SUN host configuration (ARMmbed#2690) 50ecc3d Refactoring Wi-SUN stack (ARMmbed#2686) 9d2386d Renamed operation mode to operating mode. 2f755bc RF config resolver and some refactoring (ARMmbed#2683) 86c6d19 Fixed WS IE PCAP read operation wrong length usage. cd3a4c2 Config: Remove additional HAVE_WS_ROUTER (ARMmbed#2684) cdd7f2d Added API for configure supported Phy capability. a00a3c0 Wi-SUN FAN 1.1 PCAP IE update 2d063d3 Moved State machine and timer functions to own files edb8bec Corrected system time check function return values 85358a6 Moved Wi-SUN Bootstrap Event handling to separate device handlers 61cbdde MAC to support mode switch on single channel (ARMmbed#2678) 1006d29 Added storing of PAN ID to NVM in BBR 7bf0028 Corrected system time jump detection on BR startup e60974d Split Wi-SUN bootstrap to device types a3f3412 MAC data req: API to support mode switch (ARMmbed#2674) cad5122 Removed automatic network size configuration (ARMmbed#2673) 35d3132 MAC: Callback set to resolve PHY mode ID (ARMmbed#2672) 0c5faca Added support for large system time changes (e.g. due to NTP) (ARMmbed#2670) c94b306 LFN version and LGTK Hash IE advertisment and learn 8e07511 Use FAN version constant instead of pure number a5566b2 Channel Plan 2 validation and FAN 1.0 reject 42dba41 Wi-Sun IE FAN 1.1 update 1d56070 EU channel plan ids (FAN 1.1) supported (ARMmbed#2668) fc4f41f Add test API empty function 37efc7e Add version 1.1 basic support e1558fb Implemented mode switch PHR build and parse (ARMmbed#2665) cbd8a15 Corrected frame counter storing threshold check 37f7ae9 Time configuration distribution using DHCPv6 vendor data 7415bc7 Added checks for Border Router frame counter space exhaustion (ARMmbed#2660) f1a65ec Mode switch PHY API (ARMmbed#2663) e54231b Do not check buffer age when virtual RF driver used (ARMmbed#2662) cc8c7bd arm_network_certificate_chain_set() returns -2 when PANA is disabled 319dd91 Fix dubious semicolon in #define 2ff51ab Remove extra '\n' in traces 19376c8 Simplify array indexes c808661 Fix ASAN warnings about overflows in bit shifts f998008 Fix use-after-free in mac_helper_coordinator_address_set() 4d04541 Wi-SUN header and Paylod IE element lenght future proof update. 935898b Medium network PAN_TIMEOUT changed to 30 minutes 1af7cfe Updated nanostack to be compatible with mbed TLS 3.0 (ARMmbed#2657) 29744e0 If Router Solicitation creation fails no longer tries to retry the RS right away (ARMmbed#2655) 2b889e9 Added automatic test procedure triggering during bootstrap ed9eb05 GTKs are removed only when fresh GTK hash is received 81ecdc2 Added empty function for test procedure trigger 14439b4 Added support for triggering test procedures b8a67a9 Update CHANGELOG.md for Nanostack 14.0.0 (ARMmbed#2649) git-subtree-dir: features/nanostack/sal-stack-nanostack git-subtree-split: 225a4af
…..225a4af 225a4af Remove files from tests folder 58d2c8f Merge remote-tracking branch 'origin/release_internal' into release_external 921b4b3 Wi-SUN FAN 1.1 dynamic MDR data request enabler b8722e8 Corrected BR removing of waiting list entry when supplicant is in key storage 0d54d7a Adjust trace levels (ARMmbed#2692) 681d9ea Added reset for pan id and version to BR network start 30d4fb2 Renaming and cleaning ws bootstrap (ARMmbed#2688) e0da19d Add Wi-SUN host configuration (ARMmbed#2690) 50ecc3d Refactoring Wi-SUN stack (ARMmbed#2686) 9d2386d Renamed operation mode to operating mode. 2f755bc RF config resolver and some refactoring (ARMmbed#2683) 86c6d19 Fixed WS IE PCAP read operation wrong length usage. cd3a4c2 Config: Remove additional HAVE_WS_ROUTER (ARMmbed#2684) cdd7f2d Added API for configure supported Phy capability. a00a3c0 Wi-SUN FAN 1.1 PCAP IE update 2d063d3 Moved State machine and timer functions to own files edb8bec Corrected system time check function return values 85358a6 Moved Wi-SUN Bootstrap Event handling to separate device handlers 61cbdde MAC to support mode switch on single channel (ARMmbed#2678) 1006d29 Added storing of PAN ID to NVM in BBR 7bf0028 Corrected system time jump detection on BR startup e60974d Split Wi-SUN bootstrap to device types a3f3412 MAC data req: API to support mode switch (ARMmbed#2674) cad5122 Removed automatic network size configuration (ARMmbed#2673) 35d3132 MAC: Callback set to resolve PHY mode ID (ARMmbed#2672) 0c5faca Added support for large system time changes (e.g. due to NTP) (ARMmbed#2670) c94b306 LFN version and LGTK Hash IE advertisment and learn 8e07511 Use FAN version constant instead of pure number a5566b2 Channel Plan 2 validation and FAN 1.0 reject 42dba41 Wi-Sun IE FAN 1.1 update 1d56070 EU channel plan ids (FAN 1.1) supported (ARMmbed#2668) fc4f41f Add test API empty function 37efc7e Add version 1.1 basic support e1558fb Implemented mode switch PHR build and parse (ARMmbed#2665) cbd8a15 Corrected frame counter storing threshold check 37f7ae9 Time configuration distribution using DHCPv6 vendor data 7415bc7 Added checks for Border Router frame counter space exhaustion (ARMmbed#2660) f1a65ec Mode switch PHY API (ARMmbed#2663) e54231b Do not check buffer age when virtual RF driver used (ARMmbed#2662) cc8c7bd arm_network_certificate_chain_set() returns -2 when PANA is disabled 319dd91 Fix dubious semicolon in #define 2ff51ab Remove extra '\n' in traces 19376c8 Simplify array indexes c808661 Fix ASAN warnings about overflows in bit shifts f998008 Fix use-after-free in mac_helper_coordinator_address_set() 4d04541 Wi-SUN header and Paylod IE element lenght future proof update. 935898b Medium network PAN_TIMEOUT changed to 30 minutes 1af7cfe Updated nanostack to be compatible with mbed TLS 3.0 (ARMmbed#2657) 29744e0 If Router Solicitation creation fails no longer tries to retry the RS right away (ARMmbed#2655) 2b889e9 Added automatic test procedure triggering during bootstrap ed9eb05 GTKs are removed only when fresh GTK hash is received 81ecdc2 Added empty function for test procedure trigger 14439b4 Added support for triggering test procedures b8a67a9 Update CHANGELOG.md for Nanostack 14.0.0 (ARMmbed#2649) git-subtree-dir: features/nanostack/sal-stack-nanostack git-subtree-split: 225a4af
…a3c5c5..225a4af 225a4af Remove files from tests folder 58d2c8f Merge remote-tracking branch 'origin/release_internal' into release_external 921b4b3 Wi-SUN FAN 1.1 dynamic MDR data request enabler b8722e8 Corrected BR removing of waiting list entry when supplicant is in key storage 0d54d7a Adjust trace levels (ARMmbed#2692) 681d9ea Added reset for pan id and version to BR network start 30d4fb2 Renaming and cleaning ws bootstrap (ARMmbed#2688) e0da19d Add Wi-SUN host configuration (ARMmbed#2690) 50ecc3d Refactoring Wi-SUN stack (ARMmbed#2686) 9d2386d Renamed operation mode to operating mode. 2f755bc RF config resolver and some refactoring (ARMmbed#2683) 86c6d19 Fixed WS IE PCAP read operation wrong length usage. cd3a4c2 Config: Remove additional HAVE_WS_ROUTER (ARMmbed#2684) cdd7f2d Added API for configure supported Phy capability. a00a3c0 Wi-SUN FAN 1.1 PCAP IE update 2d063d3 Moved State machine and timer functions to own files edb8bec Corrected system time check function return values 85358a6 Moved Wi-SUN Bootstrap Event handling to separate device handlers 61cbdde MAC to support mode switch on single channel (ARMmbed#2678) 1006d29 Added storing of PAN ID to NVM in BBR 7bf0028 Corrected system time jump detection on BR startup e60974d Split Wi-SUN bootstrap to device types a3f3412 MAC data req: API to support mode switch (ARMmbed#2674) cad5122 Removed automatic network size configuration (ARMmbed#2673) 35d3132 MAC: Callback set to resolve PHY mode ID (ARMmbed#2672) 0c5faca Added support for large system time changes (e.g. due to NTP) (ARMmbed#2670) c94b306 LFN version and LGTK Hash IE advertisment and learn 8e07511 Use FAN version constant instead of pure number a5566b2 Channel Plan 2 validation and FAN 1.0 reject 42dba41 Wi-Sun IE FAN 1.1 update 1d56070 EU channel plan ids (FAN 1.1) supported (ARMmbed#2668) fc4f41f Add test API empty function 37efc7e Add version 1.1 basic support e1558fb Implemented mode switch PHR build and parse (ARMmbed#2665) cbd8a15 Corrected frame counter storing threshold check 37f7ae9 Time configuration distribution using DHCPv6 vendor data 7415bc7 Added checks for Border Router frame counter space exhaustion (ARMmbed#2660) f1a65ec Mode switch PHY API (ARMmbed#2663) e54231b Do not check buffer age when virtual RF driver used (ARMmbed#2662) cc8c7bd arm_network_certificate_chain_set() returns -2 when PANA is disabled 319dd91 Fix dubious semicolon in #define 2ff51ab Remove extra '\n' in traces 19376c8 Simplify array indexes c808661 Fix ASAN warnings about overflows in bit shifts f998008 Fix use-after-free in mac_helper_coordinator_address_set() 4d04541 Wi-SUN header and Paylod IE element lenght future proof update. 935898b Medium network PAN_TIMEOUT changed to 30 minutes 1af7cfe Updated nanostack to be compatible with mbed TLS 3.0 (ARMmbed#2657) 29744e0 If Router Solicitation creation fails no longer tries to retry the RS right away (ARMmbed#2655) 2b889e9 Added automatic test procedure triggering during bootstrap ed9eb05 GTKs are removed only when fresh GTK hash is received 81ecdc2 Added empty function for test procedure trigger 14439b4 Added support for triggering test procedures b8a67a9 Update CHANGELOG.md for Nanostack 14.0.0 (ARMmbed#2649) git-subtree-dir: connectivity/nanostack/sal-stack-nanostack git-subtree-split: 225a4af
Description
Jenkins jobs are failing due build error:
Fix the error by renaming callback as arm_hal_callback.