Changeset 550
- Timestamp:
- 12/28/06 17:52:49 (2 years ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cherokee/buffer.c (modified) (8 diffs)
- cherokee/trunk/cherokee/buffer.h (modified) (1 diff)
- cherokee/trunk/cherokee/handler_file.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r549 r550 1 2006-12-28 A.D.F <adefacc@tin.it> 2 3 * cherokee/buffer.h: 4 - added cherokee_buffer_add_llong10(); 5 6 * cherokee/buffer.c: 7 - added cherokee_buffer_add_llong10(); 8 - added unlikely in the test condition for a malloc() failure; 9 10 * cherokee/handler_file.c: 11 - cherokee_handler_file_add_headers(), 12 replaced cherokee_buffer_add_va() calls 13 for cherokee_buffer_add_str|*long1x() calls. 14 15 Above listed modifications speed up cherokee by around 10% (+-2%) 16 when retrieving a small file (index.html) whose size is 810 bytes, 17 i.e.: 8550 -> 9500 requests / sec. 18 1 19 2006-12-28 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 20 cherokee/trunk/cherokee/buffer.c
r540 r550 214 214 cherokee_buffer_add_long10 (cherokee_buffer_t *buf, clong_t lNum) 215 215 { 216 unsigned long ulNum = (unsigned long) lNum;217 cuint_t flgNeg = 0;218 int newlen = 0;219 size_t i = (IOS_NUMBUF - 1);220 char szOutBuf[IOS_NUMBUF];216 culong_t ulNum = (culong_t) lNum; 217 cuint_t flgNeg = 0; 218 int newlen = 0; 219 size_t i = (IOS_NUMBUF - 1); 220 char szOutBuf[IOS_NUMBUF]; 221 221 222 222 if (lNum < 0L) { … … 258 258 259 259 ret_t 260 cherokee_buffer_add_ulong10 (cherokee_buffer_t *buf, culong_t culNum) 261 { 262 unsigned long ulNum = culNum; 263 int newlen = 0; 264 size_t i = (IOS_NUMBUF - 1); 265 char szOutBuf[IOS_NUMBUF]; 260 cherokee_buffer_add_llong10 (cherokee_buffer_t *buf, cllong_t lNum) 261 { 262 cullong_t ulNum = (cullong_t) lNum; 263 cuint_t flgNeg = 0; 264 int newlen = 0; 265 size_t i = (IOS_NUMBUF - 1); 266 char szOutBuf[IOS_NUMBUF]; 267 268 if (lNum < 0L) { 269 flgNeg = 1; 270 ulNum = -ulNum; 271 } 266 272 267 273 szOutBuf[i] = '\0'; … … 273 279 } 274 280 while ((ulNum /= 10) != 0); 281 282 /* Set sign in any case 283 */ 284 szOutBuf[--i] = '-'; 285 i += (flgNeg ^ 1); 275 286 276 287 /* Verify free space in buffer and if needed then enlarge it. … … 293 304 294 305 ret_t 295 cherokee_buffer_add_ullong10 (cherokee_buffer_t *buf, cullong_t culNum) 296 { 297 unsigned long long ulNum = culNum; 306 cherokee_buffer_add_ulong10 (cherokee_buffer_t *buf, culong_t ulNum) 307 { 298 308 int newlen = 0; 299 309 size_t i = (IOS_NUMBUF - 1); … … 327 337 328 338 329 /* 330 ** Add a number in hexadecimal format to (buf). 331 */ 332 ret_t 333 cherokee_buffer_add_ulong16 (cherokee_buffer_t *buf, culong_t culNum) 334 { 335 unsigned long ulNum = culNum; 339 ret_t 340 cherokee_buffer_add_ullong10 (cherokee_buffer_t *buf, cullong_t ulNum) 341 { 342 int newlen = 0; 336 343 size_t i = (IOS_NUMBUF - 1); 337 int ival = 0;338 int newlen = 0;339 344 char szOutBuf[IOS_NUMBUF]; 340 345 … … 344 349 */ 345 350 do { 346 ival = (int) (ulNum & 0xF); 347 szOutBuf[--i] = (char) TO_HEX(ival); 348 } 349 while ((ulNum >>= 4) != 0); 351 szOutBuf[--i] = (char) ((ulNum % 10) + '0'); 352 } 353 while ((ulNum /= 10) != 0); 350 354 351 355 /* Verify free space in buffer and if needed then enlarge it. … … 371 375 */ 372 376 ret_t 373 cherokee_buffer_add_ullong16 (cherokee_buffer_t *buf, cullong_t culNum) 374 { 375 unsigned long long ulNum = culNum; 377 cherokee_buffer_add_ulong16 (cherokee_buffer_t *buf, culong_t ulNum) 378 { 379 size_t i = (IOS_NUMBUF - 1); 380 int ival = 0; 381 int newlen = 0; 382 char szOutBuf[IOS_NUMBUF]; 383 384 szOutBuf[i] = '\0'; 385 386 /* Convert number to string 387 */ 388 do { 389 ival = (int) (ulNum & 0xF); 390 szOutBuf[--i] = (char) TO_HEX(ival); 391 } 392 while ((ulNum >>= 4) != 0); 393 394 /* Verify free space in buffer and if needed then enlarge it. 395 */ 396 newlen = buf->len + (int) ((IOS_NUMBUF - 1) - i); 397 if (unlikely( newlen >= buf->size )) { 398 if (unlikely (realloc_new_bufsize(buf, newlen)) != ret_ok) 399 return ret_nomem; 400 } 401 402 /* Copy including '\0' 403 */ 404 strcpy (buf->buf + buf->len, &szOutBuf[i]); 405 406 buf->len = newlen; 407 408 return ret_ok; 409 } 410 411 412 /* 413 ** Add a number in hexadecimal format to (buf). 414 */ 415 ret_t 416 cherokee_buffer_add_ullong16 (cherokee_buffer_t *buf, cullong_t ulNum) 417 { 376 418 size_t i = (IOS_NUMBUF - 1); 377 419 int ival = 0; … … 1336 1378 1337 1379 new_buf = (char *) malloc((buf->len * 2)+1); 1338 if ( new_buf == NULL) {1380 if (unlikely (new_buf == NULL)) { 1339 1381 return ret_error; 1340 1382 } cherokee/trunk/cherokee/buffer.h
r527 r550 65 65 ret_t cherokee_buffer_add (cherokee_buffer_t *buf, char *txt, size_t size); 66 66 ret_t cherokee_buffer_add_long10 (cherokee_buffer_t *buf, clong_t lNum); 67 ret_t cherokee_buffer_add_llong10 (cherokee_buffer_t *buf, cllong_t lNum); 67 68 ret_t cherokee_buffer_add_ulong10 (cherokee_buffer_t *buf, culong_t ulNum); 68 69 ret_t cherokee_buffer_add_ullong10 (cherokee_buffer_t *buf, cullong_t ulNum); cherokee/trunk/cherokee/handler_file.c
r529 r550 551 551 */ 552 552 if (conn->header.version >= http_version_11) { 553 cherokee_buffer_add_va (buffer, "ETag: %lx=" FMT_OFFSET_HEX CRLF, fhdl->info->st_mtime, fhdl->info->st_size); 553 /* 554 * "ETag: %lx=" FMT_OFFSET_HEX CRLF 555 */ 556 cherokee_buffer_add_str (buffer, "ETag: "); 557 cherokee_buffer_add_ullong16(buffer, (cullong_t) fhdl->info->st_mtime); 558 cherokee_buffer_add_str (buffer, "="); 559 cherokee_buffer_add_ullong16(buffer, (cullong_t) fhdl->info->st_size); 560 cherokee_buffer_add_str (buffer, CRLF); 554 561 } 555 562 … … 573 580 574 581 cherokee_mime_entry_get_type (fhdl->mime, &mime); 575 cherokee_buffer_add_str (buffer, "Content-Type: ");576 cherokee_buffer_add_buffer (buffer, mime);577 cherokee_buffer_add_str (buffer, CRLF);582 cherokee_buffer_add_str (buffer, "Content-Type: "); 583 cherokee_buffer_add_buffer(buffer, mime); 584 cherokee_buffer_add_str (buffer, CRLF); 578 585 579 586 ret = cherokee_mime_entry_get_maxage (fhdl->mime, &maxage); … … 605 612 if (conn->encoder == NULL) { 606 613 if (conn->error_code == http_partial_content) { 607 cherokee_buffer_add_va (buffer, 608 "Content-Range: bytes " FMT_OFFSET "-" 609 FMT_OFFSET "/" FMT_OFFSET CRLF, 610 conn->range_start, 611 conn->range_end - 1, 612 fhdl->info->st_size); 613 } 614 615 cherokee_buffer_add_va (buffer, "Content-Length: " FMT_OFFSET CRLF, content_length); 614 /* 615 * "Content-Range: bytes " FMT_OFFSET "-" FMT_OFFSET 616 * "/" FMT_OFFSET CRLF 617 */ 618 cherokee_buffer_add_str (buffer, "Content-Range: bytes "); 619 cherokee_buffer_add_ullong10(buffer, (cullong_t)conn->range_start); 620 cherokee_buffer_add_str (buffer, "-"); 621 cherokee_buffer_add_ullong10(buffer, (cullong_t)(conn->range_end - 1)); 622 cherokee_buffer_add_str (buffer, "/"); 623 cherokee_buffer_add_ullong10(buffer, (cullong_t)fhdl->info->st_size); 624 cherokee_buffer_add_str (buffer, CRLF); 625 } 626 627 /* 628 * "Content-Length: " FMT_OFFSET CRLF 629 */ 630 cherokee_buffer_add_str (buffer, "Content-Length: "); 631 cherokee_buffer_add_ullong10(buffer, (cullong_t) content_length); 632 cherokee_buffer_add_str (buffer, CRLF); 616 633 617 634 } else {