Skip to content

Commit 9dbb419

Browse files
committed
Merge remote-tracking branch 'origin/2.9'
* origin/2.9: Fix for issue 2516: make sure the entire list is scanned when searching for a segment entry
2 parents f578415 + 4d86b21 commit 9dbb419

1 file changed

Lines changed: 11 additions & 9 deletions

File tree

src/rtapi/uspace_common.h

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,21 @@ int rtapi_shmem_new(int key, int module_id, unsigned long int size)
6565
rtapi_shmem_handle *shmem;
6666
int i;
6767

68-
for(i=0 ; i < MAX_SHM; i++) {
69-
if(shmem_array[i].magic == SHMEM_MAGIC && shmem_array[i].key == key) {
70-
shmem_array[i].count ++;
71-
return i;
68+
for (i=0,shmem=0 ; i < MAX_SHM; i++) {
69+
if(shmem_array[i].magic == SHMEM_MAGIC) {
70+
if (shmem_array[i].key == key) {
71+
shmem_array[i].count ++;
72+
return i;
73+
}
74+
}
75+
else if (!shmem) {
76+
shmem = &shmem_array[i];
7277
}
73-
if(shmem_array[i].magic != SHMEM_MAGIC) break;
7478
}
75-
if(i == MAX_SHM)
76-
{
79+
if (!shmem) {
7780
rtapi_print_msg(RTAPI_MSG_ERR, "rtapi_shmem_new failed due to MAX_SHM\n");
7881
return -ENOMEM;
7982
}
80-
shmem = &shmem_array[i];
8183

8284
/* now get shared memory block from OS */
8385
int shmget_retries = 5;
@@ -156,7 +158,7 @@ int rtapi_shmem_new(int key, int module_id, unsigned long int size)
156158
shmem->count = 1;
157159

158160
/* return handle to the caller */
159-
return i;
161+
return shmem - shmem_array;
160162
}
161163

162164

0 commit comments

Comments
 (0)