/*********************************************************************************
 * The contents of this file are subject to the Common Public Attribution
 * License Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.openemm.org/cpal1.html. The License is based on the Mozilla
 * Public License Version 1.1 but Sections 14 and 15 have been added to cover
 * use of software over a computer network and provide for limited attribution
 * for the Original Developer. In addition, Exhibit A has been modified to be
 * consistent with Exhibit B.
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * 
 * The Original Code is OpenEMM.
 * The Original Developer is the Initial Developer.
 * The Initial Developer of the Original Code is AGNITAS AG. All portions of
 * the code written by AGNITAS AG are Copyright (c) 2007 AGNITAS AG. All Rights
 * Reserved.
 * 
 * Contributor(s): AGNITAS AG. 
 ********************************************************************************/
# include	<stdlib.h>
# include	<string.h>
# include	"xmlback.h"

counter_t *
counter_alloc (const char *mediatype, int subtype) /*{{{*/
{
	counter_t	*c;
	
	if (c = (counter_t *) malloc (sizeof (counter_t))) {
		c -> mediatype = strdup (mediatype);
		c -> subtype = subtype;
		c -> unitcount = 0;
		c -> bytecount = 0;
		c -> next = NULL;
		if (! c -> mediatype)
			c = counter_free (c);
	}
	return c;
}/*}}}*/
counter_t *
counter_free (counter_t *c) /*{{{*/
{
	if (c) {
		if (c -> mediatype)
			free (c -> mediatype);
		free (c);
	}
	return NULL;
}/*}}}*/
counter_t *
counter_free_all (counter_t *c) /*{{{*/
{
	counter_t	*tmp;
	
	while (tmp = c) {
		c = c -> next;
		counter_free (tmp);
	}
	return NULL;
}/*}}}*/
counter_t *
counter_alloc (const char *mediatype, int subtype) /*{{{*/
{
	counter_t	*c;
	
	if (c = (counter_t *) malloc (sizeof (counter_t))) {
		c -> mediatype = strdup (mediatype);
		c -> subtype = subtype;
		c -> unitcount = 0;
		c -> bytecount = 0;
		c -> next = NULL;
		if (! c -> mediatype)
			c = counter_free (c);
	}
	return c;
}/*}}}*/
Example #3
0
void
collector_stop (Collector *collector)
{
    GList *list;

    if (!collector->counters)
	return;
    
    /* Read any remaining data */
    for (list = collector->counters; list != NULL; list = list->next)
    {
	counter_t *counter = list->data;
	
	if (counter->data)
	    on_read (counter);
    
	counter_free (counter);
    }

    g_list_free (collector->counters);
    collector->counters = NULL;
}
Example #4
0
gboolean
collector_start (Collector  *collector,
		 pid_t       pid,
		 GError    **err)
{
    int n_cpus = get_n_cpus ();
    int i;
    counter_t *output;

    if (!collector->tracker)
	collector->tracker = tracker_new ();

    output = NULL;
    for (i = 0; i < n_cpus; ++i)
    {
	counter_t *counter = counter_new (collector, pid, i, output, err);

	if (!counter)
	{
	    GList *list;
	    
	    for (list = collector->counters; list != NULL; list = list->next)
		counter_free (list->data);

	    collector->tracker = NULL;
	    
	    return FALSE;
	}

	collector->counters = g_list_append (collector->counters, counter);

	if (!output)
	    output = counter;
    }

    enable_counters (collector);
    
    return TRUE;
}