Sending Mavlink request via USB does not finish

Hello Everyone,

Complete newcomer to the world of mavlink and Ardupilot.

I am trying to connect ArduPilot 2.8 from C++ from Mac via usb port and I have been using c_uart_interface_example code. The problem is that I can read from usb port but when I write back the program gets stuck at

const int bytesWritten = static_cast(write(fd, buf, len));

it does not crash but just keeps on waiting endlessly, and similarly the read thread stops as well. Interestingly, a little debugging shows that code goes beyond
pthread_mutex_lock(&lock); indicating that the write is not locked.

This is where I got so far,
I am getting heartbeats without any problem
my heartbeat looks like as follows,
heartbeat autopilot= 3
heartbeat base_mode= 81
heartbeat mavlink_version= 3
heartbeat type= 2
heartbeat system_status= 4

My sysid = 1 and compid = 1

Once I get heartbeat I am sending request for Attitude information, code is,

switch (message.msgid)
		{

		case MAVLINK_MSG_ID_HEARTBEAT: {
			printf("MAVLINK_MSG_ID_HEARTBEAT\n");
			mavlink_msg_heartbeat_decode(&message, &(current_messages.heartbeat));
			current_messages.time_stamps.heartbeat = get_time_usec();
			this_timestamps.heartbeat = current_messages.time_stamps.heartbeat;

			mavlink_msg_request_data_stream_pack(127, 0, &request_message,1,1, MAVLINK_MSG_ID_ATTITUDE, 1, 1);

			write_message(request_message);

			heartbeat_found =1;

			break;
		} 

}

And this is where the whole things keeps on waiting endlessly to write the data on serial port.

Any idea why this is happening ? Please let me know if any more info will be useful .