struct ast_taskprocessor;
+/*! \brief Suggested maximum taskprocessor name length (less null terminator). */
+#define AST_TASKPROCESSOR_MAX_NAME 45
+
#define AST_TASKPROCESSOR_HIGH_WATER_LEVEL 500
/*!
*/
int ast_taskprocessor_is_task(struct ast_taskprocessor *tps);
+/*!
+ * \brief Get the next sequence number to create a human friendly taskprocessor name.
+ * \since 13.8.0
+ *
+ * \return Sequence number for use in creating human friendly taskprocessor names.
+ */
+unsigned int ast_taskprocessor_seq_num(void);
+
+/*!
+ * \brief Build a taskprocessor name with a sequence number on the end.
+ * \since 13.8.0
+ *
+ * \param buf Where to put the built taskprocessor name.
+ * \param size How large is buf including null terminator.
+ * \param format printf format to create the non-sequenced part of the name.
+ *
+ * \note The user supplied part of the taskprocessor name is truncated
+ * to allow the full sequence number to be appended within the supplied
+ * buffer size.
+ *
+ * \return Nothing
+ */
+void __attribute__((format(printf, 3, 4))) ast_taskprocessor_build_name(char *buf, unsigned int size, const char *format, ...);
+
/*!
* \brief Return the name of the taskprocessor singleton
* \since 1.6.1
ao2_unlock(tps);
return is_task;
}
+
+unsigned int ast_taskprocessor_seq_num(void)
+{
+ static int seq_num;
+
+ return (unsigned int) ast_atomic_fetchadd_int(&seq_num, +1);
+}
+
+void ast_taskprocessor_build_name(char *buf, unsigned int size, const char *format, ...)
+{
+ va_list ap;
+ int user_size;
+#define SEQ_STR_SIZE (1 + 8 + 1) /* Dash plus 8 hex digits plus null terminator */
+
+ ast_assert(buf != NULL);
+ ast_assert(SEQ_STR_SIZE <= size);
+
+ va_start(ap, format);
+ user_size = vsnprintf(buf, size - (SEQ_STR_SIZE - 1), format, ap);
+ va_end(ap);
+ if (user_size < 0) {
+ /*
+ * Wow! We got an output error to a memory buffer.
+ * Assume no user part of name written.
+ */
+ user_size = 0;
+ } else if (size < user_size + SEQ_STR_SIZE) {
+ /* Truncate user part of name to make sequence number fit. */
+ user_size = size - SEQ_STR_SIZE;
+ }
+
+ /* Append sequence number to end of user name. */
+ snprintf(buf + user_size, SEQ_STR_SIZE, "-%08x", ast_taskprocessor_seq_num());
+}