Skip to content

Commit 47cd18c

Browse files
committed
When fetching a counter, do not accidentally create it in case it does not exist
1 parent f1fec17 commit 47cd18c

File tree

1 file changed

+49
-1
lines changed

1 file changed

+49
-1
lines changed

modules/cachedb_memcached/cachedb_memcached.c

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,55 @@ int wrap_memcached_sub(cachedb_con *connection,str* attr,int val,
293293

294294
int wrap_memcached_get_counter(cachedb_con *connection,str* attr, int* res)
295295
{
296-
return wrap_memcached_add(connection,attr,0,0,res);
296+
memcached_return rc;
297+
char * ret;
298+
size_t ret_len;
299+
uint32_t fl;
300+
char * err;
301+
memcached_con *con;
302+
struct timeval start;
303+
str rpl;
304+
305+
start_expire_timer(start,memcache_exec_threshold);
306+
con = (memcached_con *)connection->data;
307+
308+
ret = memcached_get(con->memc,attr->s, attr->len,
309+
&ret_len,&fl,&rc);
310+
311+
if(ret == NULL)
312+
{
313+
if(rc == MEMCACHED_NOTFOUND)
314+
{
315+
stop_expire_timer(start,memcache_exec_threshold,
316+
"cachedb_memcached counter fetch",attr->s,attr->len,0);
317+
return -2;
318+
}
319+
else
320+
{
321+
err = (char*)memcached_strerror(con->memc,rc);
322+
LM_ERR("Failed to get: %s\n",err );
323+
stop_expire_timer(start,memcache_exec_threshold,
324+
"cachedb_memcached counter fetch",attr->s,attr->len,0);
325+
return -1;
326+
}
327+
}
328+
329+
rpl.len = (int)ret_len;
330+
rpl.s = ret;
331+
332+
if (str2sint(&rpl,res) < 0) {
333+
LM_ERR("Failed to convert %.*s to int\n",(int)ret_len,ret);
334+
stop_expire_timer(start,memcache_exec_threshold,
335+
"cachedb_memcached counter fetch",attr->s,attr->len,0);
336+
free(ret);
337+
return -1;
338+
339+
}
340+
341+
stop_expire_timer(start,memcache_exec_threshold,
342+
"cachedb_memcached counter fetch",attr->s,attr->len,0);
343+
free(ret);
344+
return 0;
297345
}
298346

299347
#define MAX_HOSTPORT_SIZE 22

0 commit comments

Comments
 (0)