@@ -2256,36 +2256,55 @@ __qname(dml_qname_cache_t *cache, const char *fmt, ...)
2256
2256
return (const char * )s ;
2257
2257
}
2258
2258
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
+ {
2262
2263
_id_info_t info = id_infos [id .id - 1 ];
2263
-
2264
2264
const char * logname = info .logname ;
2265
2265
2266
2266
// In order to distinguish the device object from any other, its id_info
2267
2267
// logname is always "dev", but we want its name when it comes to qname.
2268
2268
if (strcmp (logname , "dev" ) == 0 ) {
2269
- return MM_STRDUP ( dev_name ) ;
2269
+ return dev_name ;
2270
2270
}
2271
2271
2272
+ // avoid the qname cache if we can
2272
2273
if (info .dimensions == 0 ) {
2273
- return MM_STRDUP ( logname ) ;
2274
+ return logname ;
2274
2275
}
2275
2276
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 ];
2276
2290
uint32 indices [info .dimensions ];
2277
2291
uint32 index = id .encoded_index ;
2278
2292
for (int32 i = info .dimensions - 1 ; i >= 0 ; -- i ) {
2279
2293
indices [i ] = index % info .dimsizes [i ];
2280
2294
index /= info .dimsizes [i ];
2281
2295
}
2282
2296
2283
- return _DML_format_indices (logname , indices , info .dimensions );
2297
+ return _DML_format_indices (info . logname , indices , info .dimensions );
2284
2298
}
2285
2299
2286
2300
UNUSED static const char *
2287
2301
_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
+ }
2289
2308
char * temp_qname = _DML_get_qname_alloc (id , id_infos , dev_name );
2290
2309
const char * qname = __qname (cache , "%s" , temp_qname );
2291
2310
MM_FREE (temp_qname );
0 commit comments