Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00014 #include "common.h"
00015
00016
00017
00018
00019
00020 gearman_server_client_st *
00021 gearman_server_client_add(gearman_server_con_st *con)
00022 {
00023 gearman_server_client_st *client;
00024
00025 client= gearman_server_client_create(con, NULL);
00026 if (client == NULL)
00027 return NULL;
00028
00029 return client;
00030 }
00031
00032 gearman_server_client_st *
00033 gearman_server_client_create(gearman_server_con_st *con,
00034 gearman_server_client_st *client)
00035 {
00036 gearman_server_st *server= con->thread->server;
00037
00038 if (client == NULL)
00039 {
00040 if (server->free_client_count > 0)
00041 {
00042 client= server->free_client_list;
00043 GEARMAN_LIST_DEL(server->free_client, client, con_)
00044 }
00045 else
00046 {
00047 client= (gearman_server_client_st *)malloc(sizeof(gearman_server_client_st));
00048 if (client == NULL)
00049 {
00050 gearman_log_error(con->thread->gearman, "gearman_server_client_create", "malloc");
00051 return NULL;
00052 }
00053 }
00054
00055 client->options.allocated= true;
00056 }
00057 else
00058 {
00059 client->options.allocated= false;
00060 }
00061
00062 client->con= con;
00063 GEARMAN_LIST_ADD(con->client, client, con_)
00064 client->job= NULL;
00065 client->job_next= NULL;
00066 client->job_prev= NULL;
00067
00068 return client;
00069 }
00070
00071 void gearman_server_client_free(gearman_server_client_st *client)
00072 {
00073 gearman_server_st *server= client->con->thread->server;
00074
00075 GEARMAN_LIST_DEL(client->con->client, client, con_)
00076
00077 if (client->job != NULL)
00078 {
00079 GEARMAN_LIST_DEL(client->job->client, client, job_)
00080
00081
00082 if (client->job->client_list == NULL)
00083 {
00084 client->job->ignore_job= true;
00085 client->job->job_queued= false;
00086 }
00087 }
00088
00089 if (client->options.allocated)
00090 {
00091 if (server->free_client_count < GEARMAN_MAX_FREE_SERVER_CLIENT)
00092 GEARMAN_LIST_ADD(server->free_client, client, con_)
00093 else
00094 free(client);
00095 }
00096 }