mutex inside
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6108 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -950,6 +950,7 @@ rlc_am_data_req (void *rlc_pP, frame_t frameP, mem_block_t * sdu_pP)
|
||||
int octet_index, index;
|
||||
#endif
|
||||
|
||||
pthread_mutex_lock(&l_rlc_p->lock_input_sdus);
|
||||
if ((l_rlc_p->input_sdus[l_rlc_p->next_sdu_index].mem_block == NULL) &&
|
||||
(l_rlc_p->input_sdus[l_rlc_p->next_sdu_index].flags.segmented == 0) &&
|
||||
(((l_rlc_p->next_sdu_index + 1) % RLC_AM_SDU_CONTROL_BUFFER_SIZE) != l_rlc_p->current_sdu_index)) {
|
||||
@@ -1076,4 +1077,5 @@ rlc_am_data_req (void *rlc_pP, frame_t frameP, mem_block_t * sdu_pP)
|
||||
l_rlc_p->next_sdu_index);
|
||||
#endif
|
||||
}
|
||||
pthread_mutex_unlock(&l_rlc_p->lock_input_sdus);
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
# ifndef __RLC_AM_ENTITY_H__
|
||||
# define __RLC_AM_ENTITY_H__
|
||||
//-----------------------------------------------------------------------------
|
||||
# include <pthread.h>
|
||||
# include "platform_types.h"
|
||||
# include "platform_constants.h"
|
||||
# include "list.h"
|
||||
@@ -70,6 +71,8 @@ typedef struct rlc_am_entity_s {
|
||||
//---------------------------------------------------------------------
|
||||
// TX BUFFERS
|
||||
//---------------------------------------------------------------------
|
||||
//pthread_spinlock_t lock_input_sdus;
|
||||
pthread_mutex_t lock_input_sdus;
|
||||
rlc_am_tx_sdu_management_t *input_sdus; /*!< \brief Input SDU buffer (for SDUs coming from upper layers). */
|
||||
signed int nb_sdu; /*!< \brief Total number of valid rlc_am_tx_sdu_management_t in input_sdus[]. */
|
||||
signed int nb_sdu_no_segmented; /*!< \brief Total number of SDUs not segmented and partially segmented. */
|
||||
|
||||
@@ -51,6 +51,7 @@ void rlc_am_init(rlc_am_entity_t *rlc_pP, frame_t frameP)
|
||||
list_init(&rlc_pP->segmentation_pdu_list, "SEGMENTATION PDU LIST");
|
||||
//LOG_D(RLC,"RLC_AM_SDU_CONTROL_BUFFER_SIZE %d sizeof(rlc_am_tx_sdu_management_t) %d \n", RLC_AM_SDU_CONTROL_BUFFER_SIZE, sizeof(rlc_am_tx_sdu_management_t));
|
||||
|
||||
pthread_mutex_init(&rlc_pP->lock_input_sdus, NULL);
|
||||
rlc_pP->input_sdus = calloc(1, RLC_AM_SDU_CONTROL_BUFFER_SIZE*sizeof(rlc_am_tx_sdu_management_t));
|
||||
#warning "cast the rlc retrans buffer to uint32"
|
||||
// rlc_pP->pdu_retrans_buffer = calloc(1, (uint16_t)((unsigned int)RLC_AM_PDU_RETRANSMISSION_BUFFER_SIZE*(unsigned int)sizeof(rlc_am_tx_data_pdu_management_t)));
|
||||
@@ -162,6 +163,7 @@ void rlc_am_cleanup(rlc_am_entity_t *rlc_pP)
|
||||
free(rlc_pP->input_sdus);
|
||||
rlc_pP->input_sdus = NULL;
|
||||
}
|
||||
pthread_mutex_destroy(&rlc_pP->lock_input_sdus);
|
||||
if (rlc_pP->pdu_retrans_buffer != NULL) {
|
||||
for (i=0; i < RLC_AM_PDU_RETRANSMISSION_BUFFER_SIZE; i++) {
|
||||
if (rlc_pP->pdu_retrans_buffer[i].mem_block != NULL) {
|
||||
|
||||
@@ -189,6 +189,7 @@ void rlc_am_segment_10 (
|
||||
pdu_mem_p = NULL;
|
||||
|
||||
|
||||
pthread_mutex_lock(&rlc_pP->lock_input_sdus);
|
||||
while ((rlc_pP->input_sdus[rlc_pP->current_sdu_index].mem_block) && (nb_bytes_to_transmit > 0) ) {
|
||||
LOG_T(RLC, "[FRAME %05d][%s][RLC_AM][MOD %u/%u][RB %u][SEGMENT] nb_bytes_to_transmit %d BO %d\n",
|
||||
frameP,
|
||||
@@ -238,6 +239,7 @@ void rlc_am_segment_10 (
|
||||
rlc_pP->enb_module_id,
|
||||
rlc_pP->ue_module_id,
|
||||
rlc_pP->rb_id);
|
||||
pthread_mutex_unlock(&rlc_pP->lock_input_sdus);
|
||||
return;
|
||||
}
|
||||
LOG_T(RLC, "[FRAME %05d][%s][RLC_AM][MOD %u/%u][RB %u][SEGMENT] get new PDU %d bytes\n",
|
||||
@@ -611,4 +613,5 @@ void rlc_am_segment_10 (
|
||||
list_add_tail_eurecom (copy, &rlc_pP->segmentation_pdu_list);
|
||||
|
||||
}
|
||||
pthread_mutex_unlock(&rlc_pP->lock_input_sdus);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user