Ejemplo n.º 1
0
/**
 * Read a trace record from the trace buffer
 *
 * @idx         Trace buffer index
 * @record      Trace record to fill
 *
 * Returns false if the record is not valid.
 */
static bool get_trace_record(unsigned int idx, TraceRecord **recordptr)
{
    uint64_t event_flag = 0;
    TraceRecord record;
    /* read the event flag to see if its a valid record */
    read_from_buffer(idx, &record, sizeof(event_flag));

    if (!(record.event & TRACE_RECORD_VALID)) {
        return false;
    }

    smp_rmb(); /* read memory barrier before accessing record */
    /* read the record header to know record length */
    read_from_buffer(idx, &record, sizeof(TraceRecord));
    *recordptr = malloc(record.length); /* don't use g_malloc, can deadlock when traced */
    /* make a copy of record to avoid being overwritten */
    read_from_buffer(idx, *recordptr, record.length);
    smp_rmb(); /* memory barrier before clearing valid flag */
    (*recordptr)->event &= ~TRACE_RECORD_VALID;
    /* clear the trace buffer range for consumed record otherwise any byte
     * with its MSB set may be considered as a valid event id when the writer
     * thread crosses this range of buffer again.
     */
    clear_buffer_range(idx, record.length);
    return true;
}
Ejemplo n.º 2
0
const Byte* Problem::unpack(const Byte* buffer)
{
    const Byte* cursor = buffer;
    cursor = mesh_ptr->unpack(cursor);
    cursor = read_from_buffer(fa,cursor);
    cursor = read_from_buffer(fb,cursor);
    cursor = read_from_buffer(rhs_func,cursor);
    cursor = read_from_buffer(num_jobs, cursor);
    return cursor;
}
Ejemplo n.º 3
0
static size_t
input_curl_read(struct input_stream *is, void *ptr, size_t size,
		GError **error_r)
{
	struct input_curl *c = (struct input_curl *)is;
	bool success;
	size_t nbytes = 0;
	char *dest = ptr;

	do {
		/* fill the buffer */

		success = fill_buffer(is, error_r);
		if (!success)
			return 0;

		/* send buffer contents */

		while (size > 0 && !g_queue_is_empty(c->buffers)) {
			size_t copy = read_from_buffer(&c->icy_metadata, c->buffers,
						       dest + nbytes, size);

			nbytes += copy;
			size -= copy;
		}
	} while (nbytes == 0);

	if (icy_defined(&c->icy_metadata))
		copy_icy_tag(c);

	is->offset += (goffset)nbytes;

	return nbytes;
}
Ejemplo n.º 4
0
void handle_client(int cfd){
    char name[1024];
    bzero(name, 1024);
    read (cfd, &name, 1024);
    printf("%s\n", name);
    int fret = open(name, O_RDONLY);
    if (fret < 0){
        //perror("file error");
        write(cfd, "ER", 2);
        char* err = strerror(errno);
        write(cfd, err, strlen(err));
        printf("%s", err);

        close(cfd);
        return;
    }
    printf("asdfasdfsaf\n");
    write(cfd, "OK", 2);
    struct stat stat_src;
    fstat(fret, &stat_src);
    size_t num = htons(stat_src.st_size);
    printf("sending file size: %d\n", stat_src.st_size);
    write(cfd, &num, sizeof(num));
    s_buffer* buf = alloc_buffer(256, fret, cfd);
    int bufret = 1;
    while(bufret > 0){
        bufret = read_to_buf(buf, fret);
        bufret = read_from_buffer(buf, cfd);
    }
    dealloc_buffer(buf);
    close(cfd);
}
Ejemplo n.º 5
0
unsigned int mpeg_idle(mpeg_struct_t *Mpeg_Struct, new_screen* ScreenBuff, FileInfo_t *mpgfile)
{
	if(!Mpeg_Struct) return 0;
	if(!Mpeg_Struct->FrameReady)
	{
		do
		{
		Mpeg_Struct->state = mpeg2_parse(Mpeg_Struct->decoder);
		switch (Mpeg_Struct->state)
		{
			case STATE_BUFFER:
				//size = fread (buffer, 1, _BUFFER_SIZE_, mpgfile);
				Mpeg_Struct->size = read_from_buffer(Mpeg_Struct->buffer, 1, _BUFFER_SIZE_, mpgfile);
				if(!Mpeg_Struct->size) break;
				mpeg2_buffer (Mpeg_Struct->decoder, Mpeg_Struct->buffer, Mpeg_Struct->buffer + Mpeg_Struct->size);
			break;
			case STATE_SEQUENCE:
				mpeg2_convert (Mpeg_Struct->decoder, Mpeg_Struct->mpeg_convert, NULL);
				break;
			case STATE_SLICE:
			case STATE_END:
			case STATE_INVALID_END:
				if (Mpeg_Struct->info->display_fbuf) Mpeg_Struct->FrameReady = 1;
				break;
			default:
				break;
		}
		}while(!Mpeg_Struct->FrameReady && Mpeg_Struct->size);
	}
#ifndef AVR32
	if(Mpeg_Struct->FrameReady == true && (timer_tick(&Mpeg_Struct->FrameDisplay) == true || Mpeg_Struct->EnableFrameLimit == false))
#else
	if(Mpeg_Struct->FrameReady == true)
#endif
	{
		Mpeg_Struct->FrameReady = false;
		/*save_ppm (ScreenBuff, Mpeg_Struct->info->sequence->width, Mpeg_Struct->info->sequence->height,
							Mpeg_Struct->info->display_fbuf->buf[0], Mpeg_Struct->framenum++);*/


		_Fps++;
		//Mpeg_Struct->->info
		if(Mpeg_Struct->info->current_picture->temporal_reference != Mpeg_Struct->temporal_reference)
		{
			Mpeg_Struct->temporal_reference = Mpeg_Struct->info->current_picture->temporal_reference;
			Mpeg_Struct->CallbackDisplayFrame((void*)Mpeg_Struct->CallbackDisplayFrameVariable, Mpeg_Struct->info->display_fbuf->buf[0], 0, 0, Mpeg_Struct->info->sequence->width, Mpeg_Struct->info->sequence->height);
		}
		if(CntToDetermineTheFps != rtcSecUpdate)
		{
			CntToDetermineTheFps = rtcSecUpdate;
			//UARTPuts(DebugCom, "Screen fill capability = ", -1);
			UARTPutNum(DebugCom, _Fps);
			UARTPuts(DebugCom, "Fps\n\r", -1);
	    	_Fps = 0;
		}
	}

	//if(Mpeg_Struct->size == 0) mpeg2_close (Mpeg_Struct->decoder);
	return Mpeg_Struct->size;
}
Ejemplo n.º 6
0
const Byte* Job::unpack(const Byte* buffer)
{
    const Byte* cursor = buffer;
    cursor = problem_ptr->unpack(cursor);
    cursor = read_from_buffer(rank, cursor);
    return cursor;
}
Ejemplo n.º 7
0
static ssize_t buffered_pread(couch_file_handle handle, void *buf, size_t nbyte, off_t offset)
{
#if LOG_BUFFER
    //fprintf(stderr, "r");
#endif
    buffered_file_handle *h = (buffered_file_handle*)handle;
    // Flush the write buffer before trying to read anything:
    couchstore_error_t err = flush_buffer(h->write_buffer);
    if (err < 0) {
        return err;
    }
    
    ssize_t total_read = 0;
    while (nbyte > 0) {
        file_buffer* buffer = find_buffer(h, offset);
        
        // Read as much as we can from the current buffer:
        ssize_t nbyte_read = read_from_buffer(buffer, buf, nbyte, offset);
        if (nbyte_read == 0) {
            /*if (nbyte > buffer->capacity) {
                // Remainder won't fit in a single buffer, so just read it directly:
                nbyte_read = h->raw_ops->pread(h->raw_ops_handle, buf, nbyte, offset);
                if (nbyte_read < 0) {
                    return nbyte_read;
                }
            } else*/ {
                // Move the buffer to cover the remainder of the data to be read.
                off_t block_start = offset - (offset % READ_BUFFER_CAPACITY);
                err = load_buffer_from(buffer, block_start, (size_t)(offset + nbyte - block_start));
                if (err < 0) {
                    return err;
                }
                nbyte_read = read_from_buffer(buffer, buf, nbyte, offset);
                if (nbyte_read == 0)
                    break;  // must be at EOF
            }
        }
        buf = (char*)buf + nbyte_read;
        nbyte -= nbyte_read;
        offset += nbyte_read;
        total_read += nbyte_read;
    }
    return total_read;
}
Ejemplo n.º 8
0
const Byte* JobResult::unpack(const Byte* buffer)
{
    const Byte* cursor = buffer;

    cursor = read_from_buffer(nnz, cursor);
    cursor = read_from_buffer(n, cursor);
    cursor = read_from_buffer(rank, cursor);
    cursor = read_from_buffer(assembly_time, cursor);

    size_t matrix_byte_size = nnz*sizeof(Real);
    matrix_ptr = new Real[nnz];
    memcpy(matrix_ptr, cursor, matrix_byte_size);
    cursor += matrix_byte_size;

    size_t rhs_byte_size = n*sizeof(Real);
    rhs_ptr = new Real[n];
    memcpy(rhs_ptr, cursor, rhs_byte_size);
    cursor += rhs_byte_size;
    return cursor;
}
Ejemplo n.º 9
0
void trace_record_finish(TraceBufferRecord *rec)
{
    TraceRecord record;
    read_from_buffer(rec->tbuf_idx, &record, sizeof(TraceRecord));
    smp_wmb(); /* write barrier before marking as valid */
    record.event |= TRACE_RECORD_VALID;
    write_to_buffer(rec->tbuf_idx, &record, sizeof(TraceRecord));

    if ((trace_idx - writeout_idx) > TRACE_BUF_FLUSH_THRESHOLD) {
        flush_trace_file(false);
    }
}
Ejemplo n.º 10
0
const Byte* Solution::unpack(const Byte* buffer)
{
    const Byte* cursor = buffer;

    cursor = read_from_buffer(n, cursor);

    size_t x_byte_size = n*sizeof(Real);
    x_ptr = new Real[n];
    memcpy(x_ptr, cursor, x_byte_size);
    cursor += x_byte_size;

    return cursor;
}
Ejemplo n.º 11
0
// -----------------------------------------------------------------------------
void BLeafNode::init_restore(		// load an exist node from disk to init
	BTree* btree,						// b-tree of this node
	int block)							// addr of disk for this node
{
	btree_ = btree;					// init <btree_>
	block_ = block;					// init <block_>
	dirty_ = false;					// init <dirty_>

									// get block length
	int b_length = btree_->file_->get_blocklength();

	// -------------------------------------------------------------------------
	//  Init <capacity_keys> and calc key size
	// -------------------------------------------------------------------------
	int key_size = get_key_size(b_length);
									// init <key>
	key_ = new float[capacity_keys_];
	for (int i = 0; i < capacity_keys_; i++) {
		key_[i] = MINREAL;
	}
									// calc header size
	int header_size = get_header_size();
									// calc entry size
	int entry_size = get_entry_size();	
									// init <capacity>
	capacity_ = (b_length - header_size - key_size) / entry_size;
	if (capacity_ < 100) {			// at least 100 entries
		printf("capacity = %d\n", capacity_);
		error("BLeafNode::init_store capacity too small.\n", true);
	}
	id_ = new int[capacity_];		// init <id>
	for (int i = 0; i < capacity_; i++) {
		id_[i] = -1;
	}

	// -------------------------------------------------------------------------
	//  Read the buffer <blk> to init <level_>, <num_entries_>, <left_sibling_>,
	//  <right_sibling_>, <num_keys_> <key_> and <id_>
	// -------------------------------------------------------------------------
	char* blk = new char[b_length];
	btree_->file_->read_block(blk, block);
	read_from_buffer(blk);

	delete[] blk; blk = NULL;
}
Ejemplo n.º 12
0
/* CRYPTO_sysrand puts |requested| random bytes into |out|. */
void CRYPTO_sysrand(uint8_t *out, size_t requested) {
  if (requested == 0) {
    return;
  }

  CRYPTO_once(&once, init_once);
  if (urandom_buffering && requested < BUF_SIZE) {
    struct rand_buffer *buf = get_thread_local_buffer();
    if (buf != NULL) {
      read_from_buffer(buf, out, requested);
      return;
    }
  }

  if (!fill_with_entropy(out, requested)) {
    abort();
  }
}
Ejemplo n.º 13
0
int direct_io_read(int fd, void* buff, ssize_t size)
{
	int read_total = size;
	int read_size = 0;
	int update_size = 0;
	do{
		// read buffer first
		read_size = read_from_buffer((char*)buff + read_total - size, size);
		size -= read_size;
		if(size > 0){
			// update buffer from file
			update_size = update_from_file();
			if(0 == update_size){
				// to the end of file
				break;
			}
		}
	}while(size > 0);
	// return read size
	//DIO_TRACE("buffer(%d),file(%d),tell(%d)", read_pos, lseek(read_fd, 0, SEEK_CUR), direct_io_tell(fd));
	return read_total - size;
}
Ejemplo n.º 14
0
// -----------------------------------------------------------------------------
void BIndexNode::init_restore(		// load an exist node from disk to init
	BTree* btree,						// b-tree of this node
	int block)							// addr of disk for this node
{
	btree_ = btree;					// init <btree_>
	block_ = block;					// init <block_>
	dirty_ = false;					// init <dirty_>

									// get block length
	int b_len = btree_->file_->get_blocklength();

									// init <capacity_>
	capacity_ = (b_len - get_header_size()) / get_entry_size();
	if (capacity_ < 50) {			// at least 50 entries
		printf("capacity = %d\n", capacity_);
		error("BIndexNode::init_restore capacity too small.\n", true);
	}

	key_ = new float[capacity_];	// init <key_>
	for (int i = 0; i < capacity_; i++) {
		key_[i] = MINREAL;
	}
	son_ = new int[capacity_];		// init <son_>
	for (int i = 0; i < capacity_; i++) {
		son_[i] = -1;
	}

	// -------------------------------------------------------------------------
	//  Read the buffer <blk> to init <level_>, <num_entries_>, <left_sibling_>,
	//  <right_sibling_>, <key_> and <son_>.
	// -------------------------------------------------------------------------
	char* blk = new char[b_len];
	btree_->file_->read_block(blk, block);
	read_from_buffer(blk);

	delete[] blk; blk = NULL;
}
Ejemplo n.º 15
0
/* Read from remote client */
static Npfcall* openssl_remote_read(Npfid *afid, u64 offset, u32 count) {
    struct openssl_session_auth_context* ctx;
    int read_length;
    u8* data;
    Npfcall* rc;

    ctx = (struct openssl_session_auth_context*)afid->aux;
    if ( ctx == NULL )
        return np_create_rerror("No session context",EINVAL,1);

    /* We do not support offsets in our protocol */
    if ( offset != 0 )
        return np_create_rerror("No offset supported",EINVAL,1);

    data = malloc(count);
    if ( !data )
        return np_create_rerror("No mem",ENOMEM,1);

    read_from_buffer(&ctx->output_buffer, count, (char*)data, &read_length);

    rc = np_create_rread(read_length, data);
    free(data);
    return rc;
}
Ejemplo n.º 16
0
/* Read from server side */
static int openssl_local_read(struct openssl_session_auth_context* ctx, int requested_length, char* result, int* result_length) {
    return read_from_buffer(&ctx->input_buffer, requested_length, result, result_length);
}
Ejemplo n.º 17
0
static ssize_t i_stream_seekable_read(struct istream_private *stream)
{
	struct seekable_istream *sstream = (struct seekable_istream *)stream;
	const unsigned char *data;
	size_t size, pos;
	ssize_t ret;

	if (sstream->fd == -1) {
		if (read_from_buffer(sstream, &ret))
			return ret;

		/* copy everything to temp file and use it as the stream */
		if (copy_to_temp_file(sstream) < 0) {
			stream->max_buffer_size = (size_t)-1;
			if (!read_from_buffer(sstream, &ret))
				i_unreached();
			return ret;
		}
		i_assert(sstream->fd != -1);
	}

	stream->buffer = CONST_PTR_OFFSET(stream->buffer, stream->skip);
	stream->pos -= stream->skip;
	stream->skip = 0;

	i_assert(stream->istream.v_offset + stream->pos <= sstream->write_peak);
	if (stream->istream.v_offset + stream->pos == sstream->write_peak) {
		/* need to read more */
		if (sstream->cur_input == NULL ||
		    i_stream_get_data_size(sstream->cur_input) == 0) {
			ret = read_more(sstream);
			if (ret == -1 || ret == 0)
				return ret;
		}

		/* save to our file */
		data = i_stream_get_data(sstream->cur_input, &size);
		ret = write(sstream->fd, data, size);
		if (ret <= 0) {
			if (ret < 0 && !ENOSPACE(errno)) {
				i_error("istream-seekable: write_full(%s) failed: %m",
					sstream->temp_path);
			}
			if (i_stream_seekable_write_failed(sstream) < 0)
				return -1;
			if (!read_from_buffer(sstream, &ret))
				i_unreached();
			return ret;
		}
		i_stream_sync(sstream->fd_input);
		i_stream_skip(sstream->cur_input, ret);
		sstream->write_peak += ret;
	}

	i_stream_seek(sstream->fd_input, stream->istream.v_offset);
	ret = i_stream_read_memarea(sstream->fd_input);
	if (ret <= 0) {
		stream->istream.eof = sstream->fd_input->eof;
		stream->istream.stream_errno =
			sstream->fd_input->stream_errno;
	} else {
		ret = -2;
	}

	stream->buffer = i_stream_get_data(sstream->fd_input, &pos);
	stream->pos -= stream->skip;
	stream->skip = 0;

	ret = pos > stream->pos ? (ssize_t)(pos - stream->pos) : ret;
	stream->pos = pos;
	return ret;
}
Ejemplo n.º 18
0
/* This is the Thread which will read data from the Circular buffer 
 * and print out to the Console
 */
void* consumer_thread(void *arg) 
{
  circ_buffer_t *rcv_buf;
  double mean, smoothed_mean;
  int sockfd;
  packet_info_t *pkt_info;
  double get_rand;
  bool data_present, was_buf_full, done = FALSE;
  unsigned int ack_seq;
  unsigned short new_win;
  double prob_loss;

  assert(arg);
  assert(rcv_buf = ((thread_arg *)arg)->rcv_buf);
  assert(((thread_arg *)arg)->config);
  mean = smoothed_mean = ((thread_arg *)arg)->config->mean;
  prob_loss = ((thread_arg *)arg)->config->prob_loss;
  sockfd = ((thread_arg *)arg)->sockfd;
  free(arg);

  Pthread_detach(pthread_self());

  while (!done) {
    get_rand = (double)rand()/RAND_MAX;
    smoothed_mean = -1.0 * mean * log(get_rand);

    printf("[Consumer Thread] Wake Up in %lf ms\n", smoothed_mean);
    usleep((useconds_t)(smoothed_mean * 1000));

    data_present = FALSE;
    was_buf_full = FALSE;

    Pthread_mutex_lock(&buf_mutex);
    if (IS_BUFFER_FULL(rcv_buf))
      was_buf_full = TRUE;

    while(read_from_buffer(rcv_buf, &pkt_info) >= 0)
    {
      data_present = TRUE;
      fprintf(stdout, "[Consumer thread] [seq:%u]\n%.*s\n", pkt_info->seq,
          pkt_info->data_len, pkt_info->data);

      if(IS_EOF(pkt_info))
      {
        done = TRUE;
        break;
      }
      free_pkt_info(pkt_info);
      pkt_info = NULL;
    }
   
    /* Save off these values as we are releasing the lock below */
    new_win = window_size(rcv_buf); 
    ack_seq = NEXT_ACK(rcv_buf); 

    Pthread_mutex_unlock(&buf_mutex);

    if (!data_present)
        printf("[Consumer Thread] No data this time around\n");

    if(was_buf_full)
    {
      /* Advertise New Opened Up window */
       send_ack(sockfd, new_win, 0, ack_seq, 0, prob_loss); 
    }
  }
  exit(0);
}