Jun 16th update

This commit is contained in:
Ned Wright
2023-01-17 10:50:22 +00:00
parent 486253b198
commit b02562445f
9 changed files with 75 additions and 572 deletions

View File

@@ -21,7 +21,7 @@ extern void (*debug_int)(int is_error, const char *func, const char *file, int l
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
#endif
enum debugLevel { TraceLevel = 0, WarningLevel = 3 };
enum debugLevel { TraceLevel = 0, DebugLevel = 1, WarningLevel = 3 };
#define writeDebug(debug_level, fmt, ...) \
{ \

View File

@@ -140,14 +140,13 @@ createSharedRingQueue(const char *shared_location_name, uint16_t num_of_data_seg
g_num_of_data_segments = num_of_data_segments;
fd = shm_open(shared_location_name, shmem_fd_flags, S_IRUSR | S_IWUSR);
fd = shm_open(shared_location_name, shmem_fd_flags, S_IRWXU | S_IRWXG | S_IRWXO);
if (fd == -1) {
writeDebug(
WarningLevel,
"createSharedRingQueue: Failed to open shared memory for '%s'. Errno: %d (%s)\n",
"createSharedRingQueue: Failed to open shared memory for '%s'. Errno: %d\n",
shared_location_name,
errno,
strerror(errno)
errno
);
return NULL;
}
@@ -384,7 +383,7 @@ pushBuffersToQueue(
large_total_elem_size,
max_write_size
);
return -1;
return -2;
}
}
total_elem_size = (uint16_t)large_total_elem_size;
@@ -400,18 +399,18 @@ pushBuffersToQueue(
if (!isThereEnoughMemoryInQueue(write_pos, read_pos, num_of_segments_to_write)) {
writeDebug(WarningLevel, "Cannot write to a full queue\n");
return -1;
writeDebug(DebugLevel, "Cannot write to a full queue");
return -3;
}
if (write_pos >= g_num_of_data_segments) {
writeDebug(
WarningLevel,
DebugLevel,
"Cannot write to a location outside the queue. Write index: %u, number of queue elements: %u",
write_pos,
g_num_of_data_segments
);
return -1;
return -4;
}
if (write_pos + num_of_segments_to_write > g_num_of_data_segments) {
@@ -488,16 +487,14 @@ popFromQueue(SharedRingQueue *queue)
}
num_of_read_segments = getNumOfDataSegmentsNeeded(buffer_mgmt[read_pos]);
end_pos = read_pos + num_of_read_segments;
if (read_pos + num_of_read_segments > g_num_of_data_segments) {
for ( ; read_pos < g_num_of_data_segments; ++read_pos ) {
buffer_mgmt[read_pos] = empty_buff_mgmt_magic;
}
read_pos = 0;
}
writeDebug(
TraceLevel,
"Size of data to remove: %u, number of queue elements to free: %u, current read index: %u, end index: %u",
buffer_mgmt[read_pos],
num_of_read_segments,
read_pos,
end_pos
);
end_pos = read_pos + num_of_read_segments;
for ( ; read_pos < end_pos; ++read_pos ) {
buffer_mgmt[read_pos] = empty_buff_mgmt_magic;
@@ -509,6 +506,15 @@ popFromQueue(SharedRingQueue *queue)
}
}
writeDebug(
TraceLevel,
"Size of data to remove: %u, number of queue elements to free: %u, current read index: %u, end index: %u",
buffer_mgmt[read_pos],
num_of_read_segments,
read_pos,
end_pos
);
if (read_pos == g_num_of_data_segments) read_pos = 0;
queue->read_pos = read_pos;

View File

@@ -50,7 +50,6 @@ debugInitial(int is_error, const char *func, const char *file, int line_num, con
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
printf("\n");
}
void (*debug_int)(int is_error, const char *func, const char *file, int line_num, const char *fmt, ...) = debugInitial;
@@ -101,7 +100,7 @@ createOneWayIPCQueue(
return NULL;
}
if (is_owner && chown(shmem_path, user_id, group_id) == -1) {
if (is_owner && chmod(shmem_path, 0666) == -1) {
writeDebug(WarningLevel, "Failed to set the permissions");
destroySharedRingQueue(ring_queue, is_owner, isTowardsOwner(is_owner, is_tx_queue));
return NULL;