@@ -211,7 +211,7 @@ inline key_t _create(unsigned int count, ShmBufferType type, size_t type_size, i
211
211
}
212
212
213
213
//
214
- key_t create_object_regions (unsigned int count, size_t type_size, int key) {
214
+ key_t create_object_region (unsigned int count, size_t type_size, int key) {
215
215
if ( key < 0 ) return (-1 );
216
216
else if ( key > 0 ){
217
217
if ( !( (key >= keyMin) && (key <= keyMax) ) ) {
@@ -222,7 +222,7 @@ key_t create_object_regions(unsigned int count, size_t type_size, int key) {
222
222
if ( !(count >= lengthMin && count <= lengthMax) ) {
223
223
return -1 ;
224
224
}
225
- if ( !(type_size >= userSizeMin && count <= userSizeMax) ) {
225
+ if ( !(type_size >= userSizeMin && type_size <= userSizeMax) ) {
226
226
return -1 ;
227
227
}
228
228
//
@@ -248,46 +248,74 @@ key_t create(unsigned int count, ShmBufferType type, int key) {
248
248
}
249
249
250
250
251
- key_t get (key_t key, ShmBufferType type) {
251
+
252
+ inline key_t _get_and_set_memres (size_t type_size, int key, ShmBufferType type) {
253
+ unsigned int count = 0 ;
254
+ int resId = 0 ;
255
+ void *ref = NULL ;
256
+ int status = _get (key,count,0 ,0 ,type_size,&ref,&resId);
257
+ //
258
+ if ( status == 0 ) {
259
+ //
260
+ Mem_resource *ms = new Mem_resource ();
261
+ g_all_regions[key] = ms;
262
+ //
263
+ //
264
+ ms->count = count; // set by memsize (has to be found)
265
+ ms->key = key;
266
+ ms->type = type;
267
+ ms->el_sz = type_size;
268
+ ms->_shared_resource = ref;
269
+ ms->resid = resId;
270
+ //
271
+ return (key);
272
+ }
273
+ //
274
+ return (-1 );
275
+ }
276
+
277
+
278
+
279
+
280
+ key_t get_object_region (key_t key,size_t type_size) {
252
281
if ( key < 0 ) return (-1 );
253
282
else if ( key > 0 ){
254
283
if ( !( (key >= keyMin) && (key <= keyMax) ) ) {
255
284
return -1 ;
256
285
}
257
286
}
258
- if ( type < 0 || type > SHMBT_FLOAT64 ) type = SHMBT_BUFFER;
287
+ if ( !(type_size >= userSizeMin && type_size <= userSizeMax) ) {
288
+ return -1 ;
289
+ }
290
+ //
291
+ map<key_t ,Mem_resource *>::iterator fnd = g_all_regions.find (key);
292
+ if ( fnd != g_all_regions.end () ) {
293
+ return (key);
294
+ } else {
295
+ return (_get_and_set_memres (type_size, key, SHMBT_USER));
296
+ }
297
+ return (-1 );
298
+ }
259
299
300
+
301
+ key_t get (key_t key, ShmBufferType type) {
302
+ if ( key < 0 ) return (-1 );
303
+ else if ( key > 0 ){
304
+ if ( !( (key >= keyMin) && (key <= keyMax) ) ) {
305
+ return -1 ;
306
+ }
307
+ }
308
+ if ( type < 0 || type >= SHMBT_USER ) type = SHMBT_BUFFER;
260
309
//
261
310
map<key_t ,Mem_resource *>::iterator fnd = g_all_regions.find (key);
262
311
if ( fnd != g_all_regions.end () ) {
263
312
return (key);
264
313
} else {
265
-
314
+ //
266
315
size_t type_size = getSize1ForShmBufferType (type);
267
- unsigned int count = 0 ;
268
- int resId = 0 ;
269
- void *ref = NULL ;
270
- int status = _get (key,count,0 ,0 ,type_size,&ref,&resId);
271
-
272
- if ( status == 0 ) {
273
- //
274
- key_t k = key;
275
- Mem_resource *ms = new Mem_resource ();
276
- g_all_regions[key] = ms;
277
- //
278
- //
279
- ms->count = count; // set by memsize (has to be found)
280
- ms->key = k;
281
- ms->type = type;
282
- ms->el_sz = type_size;
283
- ms->_shared_resource = ref;
284
- ms->resid = resId;
285
- //
286
- return (k);
287
- }
288
-
316
+ //
317
+ return (_get_and_set_memres (type_size, key, type));
289
318
}
290
-
291
319
return (-1 );
292
320
}
293
321
0 commit comments