fix[mpp_singleton]: Fix 64-bit mask overflow

Use 64-bit literals in bit operations to prevent overflow
when singleton module ID >= 32.

Change-Id: Ib08190bbcbb1a0b46559ea3c2ae57d801b5efadf
Signed-off-by: Yanjun Liao <yanjun.liao@rock-chips.com>
This commit is contained in:
Yanjun Liao 2025-11-04 19:35:25 +08:00
parent 425552cb3d
commit 52f005f2df

View file

@ -38,13 +38,13 @@ rk_s32 mpp_singleton_add(MppSingletonInfo *info, const char *caller)
return rk_nok; return rk_nok;
} }
if (sgln_mask & (1 << info->id)) { if (sgln_mask & ((rk_u64)1 << info->id)) {
sgln_dbg("info %d has been registered at %s\n", info->id, caller); sgln_dbg("info %d has been registered at %s\n", info->id, caller);
return rk_nok; return rk_nok;
} }
sgln_info[info->id] = *info; sgln_info[info->id] = *info;
sgln_mask |= (1 << info->id); sgln_mask |= ((rk_u64)1 << info->id);
{ {
rk_u32 name_len = strlen(info->name); rk_u32 name_len = strlen(info->name);
@ -67,7 +67,7 @@ static void mpp_singleton_deinit(void)
/* NOTE: revert deinit order */ /* NOTE: revert deinit order */
for (i = MPP_SGLN_MAX_CNT - 1; i >= 0; i--) { for (i = MPP_SGLN_MAX_CNT - 1; i >= 0; i--) {
if (sgln_mask & (1 << i)) { if (sgln_mask & ((rk_u64)1 << i)) {
MppSingletonInfo *info = &sgln_info[i]; MppSingletonInfo *info = &sgln_info[i];
if (info->deinit) { if (info->deinit) {
@ -96,7 +96,7 @@ __attribute__((constructor(65535))) static void mpp_singleton_init(void)
atexit(mpp_singleton_deinit); atexit(mpp_singleton_deinit);
for (i = 0; i < MPP_SGLN_MAX_CNT; i++) { for (i = 0; i < MPP_SGLN_MAX_CNT; i++) {
if (sgln_mask & (1 << i)) { if (sgln_mask & ((rk_u64)1 << i)) {
MppSingletonInfo *info = &sgln_info[i]; MppSingletonInfo *info = &sgln_info[i];
if (info->init) { if (info->init) {