@@ -2256,36 +2256,55 @@ __qname(dml_qname_cache_t *cache, const char *fmt, ...)
22562256 return (const char * )s ;
22572257}
22582258
2259- UNUSED static char *
2260- _DML_get_qname_alloc (_identity_t id , const _id_info_t * id_infos ,
2261- const char * dev_name ) {
2259+ UNUSED static const char *
2260+ __static_qname (_identity_t id , const _id_info_t * id_infos ,
2261+ const char * dev_name )
2262+ {
22622263 _id_info_t info = id_infos [id .id - 1 ];
2263-
22642264 const char * logname = info .logname ;
22652265
22662266 // In order to distinguish the device object from any other, its id_info
22672267 // logname is always "dev", but we want its name when it comes to qname.
22682268 if (strcmp (logname , "dev" ) == 0 ) {
2269- return MM_STRDUP ( dev_name ) ;
2269+ return dev_name ;
22702270 }
22712271
2272+ // avoid the qname cache if we can
22722273 if (info .dimensions == 0 ) {
2273- return MM_STRDUP ( logname ) ;
2274+ return logname ;
22742275 }
22752276
2277+ return NULL ;
2278+ }
2279+
2280+ UNUSED static char *
2281+ _DML_get_qname_alloc (_identity_t id , const _id_info_t * id_infos ,
2282+ const char * dev_name )
2283+ {
2284+ const char * simple = __static_qname (id , id_infos , dev_name );
2285+ if (simple != NULL ) {
2286+ return MM_STRDUP (simple );
2287+ }
2288+
2289+ _id_info_t info = id_infos [id .id - 1 ];
22762290 uint32 indices [info .dimensions ];
22772291 uint32 index = id .encoded_index ;
22782292 for (int32 i = info .dimensions - 1 ; i >= 0 ; -- i ) {
22792293 indices [i ] = index % info .dimsizes [i ];
22802294 index /= info .dimsizes [i ];
22812295 }
22822296
2283- return _DML_format_indices (logname , indices , info .dimensions );
2297+ return _DML_format_indices (info . logname , indices , info .dimensions );
22842298}
22852299
22862300UNUSED static const char *
22872301_DML_get_qname (_identity_t id , const _id_info_t * id_infos ,
2288- dml_qname_cache_t * cache , const char * dev_name ) {
2302+ dml_qname_cache_t * cache , const char * dev_name )
2303+ {
2304+ const char * simple = __static_qname (id , id_infos , dev_name );
2305+ if (simple != NULL ) {
2306+ return simple ;
2307+ }
22892308 char * temp_qname = _DML_get_qname_alloc (id , id_infos , dev_name );
22902309 const char * qname = __qname (cache , "%s" , temp_qname );
22912310 MM_FREE (temp_qname );
0 commit comments