} else {
CRIT_ERR ("audacious_title: invalid length argument");
}
- } else {
- info.audacious.max_title_len++;
}
}
END
if (!obj->data.texeci.p_timed_thread)
{
obj->data.texeci.p_timed_thread=
- timed_thread_create ((void*)threaded_exec, (void*) obj,
- obj->data.texeci.interval * 1000000);
+ timed_thread_create ((void*)threaded_exec, (void*) obj, obj->data.texeci.interval * 1000000);
if (!obj->data.texeci.p_timed_thread)
- ERR("Error starting texeci thread");
- timed_thread_register (obj->data.texeci.p_timed_thread,
- &obj->data.texeci.p_timed_thread);
+ ERR("Error creating texeci timed thread");
+ timed_thread_register (obj->data.texeci.p_timed_thread, &obj->data.texeci.p_timed_thread);
+ if (timed_thread_run (obj->data.texeci.p_timed_thread))
+ ERR("Error running texeci timed thread");
}
timed_thread_lock (obj->data.texeci.p_timed_thread);
snprintf(p, p_max_size, "%s", obj->data.texeci.buffer);
if (!info.mail->p_timed_thread)
{
info.mail->p_timed_thread =
- timed_thread_create ((void*)imap_thread,
- (void*)info.mail,
- info.mail->interval * 1000000);
+ timed_thread_create ((void*)imap_thread, (void*)info.mail, info.mail->interval * 1000000);
if (!info.mail->p_timed_thread)
- ERR("Error starting imap thread");
- timed_thread_register (info.mail->p_timed_thread,
- &info.mail->p_timed_thread);
+ ERR("Error creating imap timed thread");
+ timed_thread_register (info.mail->p_timed_thread, &info.mail->p_timed_thread);
+ if (timed_thread_run (info.mail->p_timed_thread))
+ ERR("Error running imap timed thread");
}
timed_thread_lock (info.mail->p_timed_thread);
snprintf(p, p_max_size, "%lu", info.mail->unseen);
if (!obj->data.mail->p_timed_thread)
{
obj->data.mail->p_timed_thread =
- timed_thread_create ((void*)imap_thread,
- (void*)obj->data.mail,
- obj->data.mail->interval * 1000000);
+ timed_thread_create ((void*)imap_thread, (void*)obj->data.mail,
+ obj->data.mail->interval * 1000000);
if (!obj->data.mail->p_timed_thread)
- ERR("Error starting imap thread");
- timed_thread_register (obj->data.mail->p_timed_thread,
- &obj->data.mail->p_timed_thread);
+ ERR("Error creating imap timed thread");
+ timed_thread_register (obj->data.mail->p_timed_thread, &obj->data.mail->p_timed_thread);
+ if (timed_thread_run (obj->data.mail->p_timed_thread))
+ ERR("Error running imap timed thread");
}
timed_thread_lock (obj->data.mail->p_timed_thread);
snprintf(p, p_max_size, "%lu", obj->data.mail->unseen);
if (!info.mail->p_timed_thread)
{
info.mail->p_timed_thread =
- timed_thread_create ((void*)imap_thread,
- (void*)info.mail,
- info.mail->interval * 1000000);
- if (!info.mail->p_timed_thread)
- ERR("Error starting imap thread");
- timed_thread_register (info.mail->p_timed_thread,
- &info.mail->p_timed_thread);
+ timed_thread_create ((void*)imap_thread, (void*)info.mail, info.mail->interval * 1000000);
+ if (!info.mail->p_timed_thread)
+ ERR("Error creating imap timed thread");
+ timed_thread_register (info.mail->p_timed_thread, &info.mail->p_timed_thread);
+ if (timed_thread_run (info.mail->p_timed_thread))
+ ERR("Error running imap timed thread");
}
timed_thread_lock (info.mail->p_timed_thread);
snprintf(p, p_max_size, "%lu", info.mail->messages);
timed_thread_unlock (info.mail->p_timed_thread);
} else if (obj->data.mail) { // this means we use obj
if (!obj->data.mail->p_timed_thread)
- {
- obj->data.mail->p_timed_thread =
- timed_thread_create ((void*)imap_thread,
- (void*)obj->data.mail,
- obj->data.mail->interval * 1000000);
- if (!obj->data.mail->p_timed_thread)
- ERR("Error starting imap thread");
- timed_thread_register (obj->data.mail->p_timed_thread,
- &obj->data.mail->p_timed_thread);
- }
+ {
+ obj->data.mail->p_timed_thread =
+ timed_thread_create ((void*)imap_thread, (void*)obj->data.mail,
+ obj->data.mail->interval * 1000000);
+ if (!obj->data.mail->p_timed_thread)
+ ERR("Error creating imap timed thread");
+ timed_thread_register (obj->data.mail->p_timed_thread, &obj->data.mail->p_timed_thread);
+ if (timed_thread_run (obj->data.mail->p_timed_thread))
+ ERR("Error runninging imap timed thread");
+ }
timed_thread_lock (obj->data.mail->p_timed_thread);
snprintf(p, p_max_size, "%lu", obj->data.mail->messages);
timed_thread_lock (obj->data.mail->p_timed_thread);
if (!info.mail->p_timed_thread)
{
info.mail->p_timed_thread =
- timed_thread_create ((void*)pop3_thread,
- (void*)info.mail,
- info.mail->interval * 1000000);
+ timed_thread_create ((void*)pop3_thread, (void*)info.mail, info.mail->interval * 1000000);
if (!info.mail->p_timed_thread)
- ERR("Error starting pop3 thread");
- timed_thread_register (info.mail->p_timed_thread,
- &info.mail->p_timed_thread);
+ ERR("Error creating pop3 timed thread");
+ timed_thread_register (info.mail->p_timed_thread, &info.mail->p_timed_thread);
+ if (timed_thread_run (info.mail->p_timed_thread))
+ ERR("Error running pop3 timed thread");
}
timed_thread_lock (info.mail->p_timed_thread);
snprintf(p, p_max_size, "%lu", info.mail->unseen);
if (!obj->data.mail->p_timed_thread)
{
obj->data.mail->p_timed_thread =
- timed_thread_create ((void*)pop3_thread,
- (void*)obj->data.mail,
- obj->data.mail->interval * 1000000);
+ timed_thread_create ((void*)pop3_thread, (void*)obj->data.mail,
+ obj->data.mail->interval * 1000000);
if (!obj->data.mail->p_timed_thread)
- ERR("Error starting pop3 thread");
- timed_thread_register (obj->data.mail->p_timed_thread,
- &obj->data.mail->p_timed_thread);
+ ERR("Error creating pop3 timed thread");
+ timed_thread_register (obj->data.mail->p_timed_thread, &obj->data.mail->p_timed_thread);
+ if (timed_thread_run (obj->data.mail->p_timed_thread))
+ ERR("Error running pop3 timed thread");
}
timed_thread_lock (obj->data.mail->p_timed_thread);
snprintf(p, p_max_size, "%lu", obj->data.mail->unseen);
if (!info.mail->p_timed_thread)
{
info.mail->p_timed_thread =
- timed_thread_create ((void*)pop3_thread,
- (void*)info.mail,
- info.mail->interval * 1000000);
+ timed_thread_create ((void*)pop3_thread, (void*)info.mail, info.mail->interval * 1000000);
if (!info.mail->p_timed_thread)
- ERR("Error starting pop3 thread");
- timed_thread_register (info.mail->p_timed_thread,
- &info.mail->p_timed_thread);
+ ERR("Error creating pop3 timed thread");
+ timed_thread_register (info.mail->p_timed_thread, &info.mail->p_timed_thread);
+ if (timed_thread_run (info.mail->p_timed_thread))
+ ERR("Error running pop3 timed thread");
}
timed_thread_lock (info.mail->p_timed_thread);
snprintf(p, p_max_size, "%.1f", info.mail->used/1024.0/1024.0);
if (!obj->data.mail->p_timed_thread)
{
obj->data.mail->p_timed_thread =
- timed_thread_create ((void*)pop3_thread,
- (void*)obj->data.mail,
- obj->data.mail->interval * 1000000);
+ timed_thread_create ((void*)pop3_thread, (void*)obj->data.mail,
+ obj->data.mail->interval * 1000000);
if (!obj->data.mail->p_timed_thread)
- ERR("Error starting pop3 thread");
- timed_thread_register (obj->data.mail->p_timed_thread,
- &obj->data.mail->p_timed_thread);
+ ERR("Error creating pop3 timed thread");
+ timed_thread_register (obj->data.mail->p_timed_thread, &obj->data.mail->p_timed_thread);
+ if (timed_thread_run (obj->data.mail->p_timed_thread))
+ ERR("Error running pop3 timed thread");
}
timed_thread_lock (obj->data.mail->p_timed_thread);
snprintf(p, p_max_size, "%.1f", obj->data.mail->used/1024.0/1024.0);
pthread_mutex_t runnable_mutex; /* only for the runnable_cond */
pthread_cond_t runnable_cond; /* signalled to stop the thread */
unsigned int interval_usecs; /* timed_thread_test() wait interval in microseconds */
+ void *(*start_routine)(void*); /* thread function to run */
+ void *arg; /* thread function argument */
};
/* linked list of created threads */
static timed_thread_list *p_timed_thread_list_tail = NULL;
-/* create a timed thread */
+/* create a timed thread (object creation only) */
timed_thread*
timed_thread_create (void *(*start_routine)(void*), void *arg, unsigned int interval_usecs)
{
pthread_cond_init (&p_timed_thread->runnable_cond, NULL);
p_timed_thread->interval_usecs = interval_usecs;
+ p_timed_thread->start_routine = start_routine;
+ p_timed_thread->arg = arg;
- /* create thread */
- if (pthread_create (&p_timed_thread->thread, &p_timed_thread->thread_attr, start_routine, arg))
- {
- timed_thread_destroy (p_timed_thread, NULL);
- return NULL;
- }
-
- /*fprintf (stderr, "created timed thread 0x%08X\n", (unsigned)p_timed_thread);*/
return p_timed_thread;
}
+/* run a timed thread (drop the thread and run it) */
+int
+timed_thread_run (timed_thread* p_timed_thread)
+{
+ return pthread_create (&p_timed_thread->thread, &p_timed_thread->thread_attr,
+ p_timed_thread->start_routine, p_timed_thread->arg);
+}
/* destroy a timed thread.
* optional addr_of_p_timed_thread to set callers pointer to NULL as a convenience. */
pthread_mutex_destroy (&p_timed_thread->runnable_mutex);
pthread_cond_destroy (&p_timed_thread->runnable_cond);
- /*fprintf (stderr, "Conky: destroying thread 0x%08X\n", (unsigned)p_timed_thread);*/
free (p_timed_thread);
if (addr_of_p_timed_thread)
*addr_of_p_timed_thread = NULL;