Changeset 10457
- Timestamp:
- 02/09/15 02:16:50 (9 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/oscam-emm-cache.c
r10442 r10457 306 306 } 307 307 return NULL; 308 } 309 310 int32_t clean_stale_emm_cache_and_stat(uchar *emmd5, int64_t gone) 311 { 312 struct timeb now; 313 cs_ftime(&now); 314 int32_t count = 0; 315 316 struct s_emmcache *c; 317 LL_ITER it; 318 319 if(!emm_cache) 320 { emm_cache = ll_create("emm cache"); } 321 322 it = ll_iter_create(emm_cache); 323 while((c = ll_iter_next(&it))) 324 { 325 326 if(comp_timeb(&now, &c->lastseen) > gone && memcmp(c->emmd5, emmd5, MD5_DIGEST_LENGTH)) // clean older than gone ms and dont clean if its the current emm! 327 { 328 struct s_reader *rdr; 329 LL_ITER rdr_itr = ll_iter_create(configured_readers); 330 while((rdr = ll_iter_next(&rdr_itr))) 331 { 332 if(rdr->emmstat) 333 { 334 remove_emm_stat(rdr, c->emmd5); // clean stale entry from stats 335 count++; 336 } 337 } 338 ll_iter_remove_data(&it); // clean stale entry from emmcache 339 } 340 } 341 return count; 308 342 } 309 343 -
trunk/oscam-emm-cache.h
r10432 r10457 12 12 struct s_emmstat *get_emm_stat(struct s_reader *rdr, uchar *emmd5, uchar emmtype); // find a certain emmstat 13 13 int32_t remove_emm_stat(struct s_reader *rdr, uchar *emmd5); // remove a certain emmstat 14 int32_t clean_stale_emm_cache_and_stat(uchar *emmd5, int64_t gone); // remove stale global emmcache + emmstat where emm lastseen is older than gone ms 14 15 15 16 #else -
trunk/oscam-emm.c
r10425 r10457 535 535 int32_t reader_do_emm(struct s_reader *reader, EMM_PACKET *ep) 536 536 { 537 int32_t rc, ecs = 0 ;537 int32_t rc, ecs = 0,count; 538 538 unsigned char md5tmp[MD5_DIGEST_LENGTH]; 539 539 struct timeb tps; … … 543 543 MD5(ep->emm, ep->emm[2], md5tmp); 544 544 545 struct s_emmstat *emmstat = get_emm_stat(reader, md5tmp, ep->type); 546 if(emmstat) 547 { 548 if(reader->cachemm && emmstat->count >= reader->rewritemm) 549 { 550 ecs = 2; //skip emm 551 } 552 else 553 { 554 ecs = 1; //rewrite emm 555 } 545 count = clean_stale_emm_cache_and_stat(md5tmp, (int64_t)1000*60*60*24*30); // clean after 30 days emm is last seen! 546 if(count) 547 { 548 cs_log_dbg(D_EMM, "Cleaned %d emm stale stats and cache entries", count); 556 549 } 557 550 … … 564 557 { 565 558 cs_ftime(&emmcache->lastseen); 559 } 560 561 struct s_emmstat *emmstat = get_emm_stat(reader, md5tmp, ep->type); 562 if(emmstat) 563 { 564 if(reader->cachemm && emmstat->count >= reader->rewritemm) 565 { 566 ecs = 2; //skip emm 567 } 568 else 569 { 570 ecs = 1; //rewrite emm 571 } 572 } 573 else 574 { 575 cs_log("abort: oscam seems out of resources!"); 576 return 0; 566 577 } 567 578
Note:
See TracChangeset
for help on using the changeset viewer.