In the following code, consider a variant of channels where…

In the following code, consider a variant of channels where the channels contain malloced memory that is freed by the receiver or when the channel is closed.  It is the responsibility of the receiver to free the memory.  However, if a send cannot proceed because the channel was closed, the channel code is responsible for freeing the memory (e.g., free in malloced_channel_close and before returning CLOSED_ERROR in malloced_channel_send).  Additionally, note that a do-while loop is similar to a while loop, but the code in the loop will execute one time before checking the condition. 1. enum channel_status malloced_channel_send(channel_t* channel, char* msg) 2. { 3. char* msg_copy = strdup(msg); //duplicates string, needs to be freed (calls malloc internally) 4. if (msg_copy == NULL) { 5. return GENERIC_ERROR; 6. } 7. pthread_mutex_lock(&channel->mutex); 8. do { 9. if (channel->isClosed) {10.   pthread_mutex_unlock(&channel->mutex);11. free(msg_copy);12.   return CLOSED_ERROR;13. }14. if (buffer_capacity(channel->buffer) == buffer_current_size(channel->buffer) {15.         pthread_cond_wait(&channel->send_wait, &channel->mutex);16. }17. } while (buffer_capacity(channel->buffer) == buffer_current_size(channel->buffer));18.19. buffer_add(channel->buffer, msg_copy);20. pthread_cond_signal(&channel->recv_wait);21. pthread_mutex_unlock(&channel->mutex);22.23. return SUCCESS;24. } 25. enum channel_status malloced_channel_close(channel_t* channel)26. {27. pthread_mutex_lock(&channel->mutex);28.29.   if (channel->isClosed) {30.     pthread_mutex_unlock(&channel->mutex);31.     return CLOSED_ERROR;32.   }33.   channel->isClosed = true;34. 35. // remove messages from buffer and free associated memory36. while (buffer_current_size(channel->buffer) > 0) {37. void* msg;38.         buffer_remove(channel->buffer, &msg);39. free(msg);     40. }41. 42.   pthread_cond_broadcast(&channel->send_wait);43.   pthread_cond_broadcast(&channel->recv_wait);44.     pthread_mutex_unlock(&channel->mutex);45.   46.   return SUCCESS;47. } Describe the bug in the code and give an example of how it shows up.  In your example, make sure to include any conditions needed for the bug to show up (e.g., a specific number of messages in the channel).  Assume all other channel functions and the usage of these functions are correct.

While taking this portion of Midterm exam 1, all students mu…

While taking this portion of Midterm exam 1, all students must abide by UT’s Academic Integrity policy. The following actions will be considered a violation of UT’s Honor Code: Collaborating with another person while taking this exam Sharing information from this exam with another person Using unauthorized materials or sources of information  Recording or capturing information from this exam in any format The public posting of any portion of a exam, its test bank or groups of questions from this quiz Distributing any content from this exam to others without explicit permission from the instructor Students should NOT COPY and PASTE information into this exam from any other source, including collaborative study guides, course assignments and your own notes. Rather, answers should be composed while taking the exam.  Any student caught violating UT’s Academic Integrity policy will receive an F in the course and immediately be referred to the Dean of Students.