コード例 #1
0
ファイル: sched.c プロジェクト: texane/muk
static void process_events(void)
{
    struct event* pos;
    struct timeval timeout;

    for (pos = g_event_list; pos != NULL; pos = event_get_next(pos))
    {
        /* event timeout
         */
        event_get_timeout(pos, &timeout);
        if (timeval_is_infinite(&timeout) == false)
        {
            timeval_sub_one_tick(&timeout);
            event_set_timeout(pos, &timeout);

            if (timeval_is_null(&timeout) == true)
                event_signal(pos);
        }

        /* event was signaled
         */
        if (event_is_signaled(pos))
        {
            event_signal_tasks(pos);
            event_clear_signal(pos);
        }
    }
}
コード例 #2
0
ファイル: sorter.cpp プロジェクト: xobs/nandsee
// Searching for either a NAND block or a sync point
static int st_scanning(struct state *st) {
    int ret;
    union evt evt;

    hdr_count = 0;
	st->fdh->seek(0);
    qDebug() << "Counting headers...\n";
    while(1) {
        int s = st->fdh->pos();
        if (s == -1) {
            perror("Couldn't seek");
            return 1;
        }
        ret = event_get_next(st, &evt);
        if (ret < 0)
            break;
        hdr_count++;
        hdrs = (struct small_hdr *)realloc(hdrs, hdr_count*sizeof(struct small_hdr));
        hdrs[hdr_count-1].sec = evt.header.sec_start;
        hdrs[hdr_count-1].nsec = evt.header.nsec_start;
        hdrs[hdr_count-1].pos = s;
    }
    qDebug() << "Found" << hdr_count << "headers to sort";

    sstate_set(st, ST_GROUPING);
    return 0;
}
コード例 #3
0
ファイル: sorter.cpp プロジェクト: xobs/nandsee
/* We're all done sorting.  Write out the logfile.
 * Format:
 *   Magic number 0x43 0x9f 0x22 0x53
 *   Number of elements
 *   Array of absolute offsets from the start of the file
 *   Magic number 0xa4 0xc3 0x2d 0xe5
 *   Array of events
 */
static int st_write(struct state *st) {
    int jump_offset;
    struct evt_file_header file_header;
    uint32_t offset;

    qDebug() << "Writing out...";
	st->out_fdh->seek(0);
    offset = 0;

    // Write out the file header
    memset(&file_header, 0, sizeof(file_header));
    memcpy(file_header.magic1, EVENT_HDR_1, strlen(EVENT_HDR_1));
    file_header.version = _ntohl(1);
    file_header.count = _htonl(hdr_count);
	offset += st->out_fdh->write((char *)&file_header, sizeof(file_header));

    // Advance the offset past the jump table
    offset += hdr_count*sizeof(offset);

    // Read in the jump table entries
	st->fdh->seek(0);
    for (jump_offset=0; jump_offset<hdr_count; jump_offset++) {
        union evt evt;
        uint32_t offset_swab = _htonl(offset);
		st->out_fdh->write((char *)&offset_swab, sizeof(offset_swab));

        st->fdh->seek(hdrs[jump_offset].pos);
        memset(&evt, 0, sizeof(evt));
        event_get_next(st, &evt);
        if (evt.header.size > 32768)
            return 1;
        offset += evt.header.size;
    }

	offset += st->out_fdh->write(EVENT_HDR_2, 4);

    // Now copy over the exact events
    for (jump_offset=0; jump_offset<hdr_count; jump_offset++) {
        union evt evt;
        st->fdh->seek(hdrs[jump_offset].pos);
        event_get_next(st, &evt);
        event_write(st, &evt);
    }

    sstate_set(st, ST_DONE);
    return 1;
}