diff options
| author | Karoly Lorentey | 2004-05-27 17:24:17 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2004-05-27 17:24:17 +0000 |
| commit | 4e1bb54039da0e3d5c84e231104703d62ace938d (patch) | |
| tree | f5bfbeec2c631db3e1a8de4aa3bfe37220580cad /src | |
| parent | f76e7db651b005bb697a188e4fe684fe25e29601 (diff) | |
| parent | 6c0afe12c98f63cc694e9fae5a05e5fd18afa636 (diff) | |
| download | emacs-4e1bb54039da0e3d5c84e231104703d62ace938d.tar.gz emacs-4e1bb54039da0e3d5c84e231104703d62ace938d.zip | |
Merged in changes from CVS trunk.
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-342
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-343
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-178
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 15 | ||||
| -rw-r--r-- | src/alloc.c | 29 | ||||
| -rw-r--r-- | src/process.c | 3 | ||||
| -rw-r--r-- | src/xdisp.c | 8 |
4 files changed, 49 insertions, 6 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index cbbf4ab09a7..f15b1e582d9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,18 @@ | |||
| 1 | 2004-05-27 Kim F. Storm <storm@cua.dk> | ||
| 2 | |||
| 3 | * xdisp.c (back_to_previous_visible_line_start): Skip backwards | ||
| 4 | over display properties, e.g. images, that replace buffer text. | ||
| 5 | |||
| 6 | 2004-05-25 Kim F. Storm <storm@cua.dk> | ||
| 7 | |||
| 8 | * alloc.c (marker_blocks_pending_free): New var. | ||
| 9 | (gc_sweep): Store free marker blocks on that list. | ||
| 10 | (Fgarbage_collect): Free them after undo-list cleanup. | ||
| 11 | |||
| 12 | * process.c (wait_reading_process_input): Check connect_wait_mask | ||
| 13 | before actually accepting connection in case it has already been | ||
| 14 | accepted due to recursion. | ||
| 15 | |||
| 1 | 2004-05-23 K,Ba(Broly L,Bu(Brentey <lorentey@elte.hu> (tiny change) | 16 | 2004-05-23 K,Ba(Broly L,Bu(Brentey <lorentey@elte.hu> (tiny change) |
| 2 | 17 | ||
| 3 | * coding.c (Fset_safe_terminal_coding_system_internal): Set | 18 | * coding.c (Fset_safe_terminal_coding_system_internal): Set |
diff --git a/src/alloc.c b/src/alloc.c index ae156d89f24..1d50f19e921 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -2866,6 +2866,10 @@ int marker_block_index; | |||
| 2866 | 2866 | ||
| 2867 | union Lisp_Misc *marker_free_list; | 2867 | union Lisp_Misc *marker_free_list; |
| 2868 | 2868 | ||
| 2869 | /* Marker blocks which should be freed at end of GC. */ | ||
| 2870 | |||
| 2871 | struct marker_block *marker_blocks_pending_free; | ||
| 2872 | |||
| 2869 | /* Total number of marker blocks now in use. */ | 2873 | /* Total number of marker blocks now in use. */ |
| 2870 | 2874 | ||
| 2871 | int n_marker_blocks; | 2875 | int n_marker_blocks; |
| @@ -2876,6 +2880,7 @@ init_marker () | |||
| 2876 | marker_block = NULL; | 2880 | marker_block = NULL; |
| 2877 | marker_block_index = MARKER_BLOCK_SIZE; | 2881 | marker_block_index = MARKER_BLOCK_SIZE; |
| 2878 | marker_free_list = 0; | 2882 | marker_free_list = 0; |
| 2883 | marker_blocks_pending_free = 0; | ||
| 2879 | n_marker_blocks = 0; | 2884 | n_marker_blocks = 0; |
| 2880 | } | 2885 | } |
| 2881 | 2886 | ||
| @@ -4531,6 +4536,18 @@ returns nil, because real GC can't be done. */) | |||
| 4531 | } | 4536 | } |
| 4532 | } | 4537 | } |
| 4533 | 4538 | ||
| 4539 | /* Undo lists have been cleaned up, so we can free marker blocks now. */ | ||
| 4540 | |||
| 4541 | { | ||
| 4542 | struct marker_block *mblk; | ||
| 4543 | |||
| 4544 | while ((mblk = marker_blocks_pending_free) != 0) | ||
| 4545 | { | ||
| 4546 | marker_blocks_pending_free = mblk->next; | ||
| 4547 | lisp_free (mblk); | ||
| 4548 | } | ||
| 4549 | } | ||
| 4550 | |||
| 4534 | /* Clear the mark bits that we set in certain root slots. */ | 4551 | /* Clear the mark bits that we set in certain root slots. */ |
| 4535 | 4552 | ||
| 4536 | unmark_byte_stack (); | 4553 | unmark_byte_stack (); |
| @@ -5439,6 +5456,7 @@ gc_sweep () | |||
| 5439 | register int num_free = 0, num_used = 0; | 5456 | register int num_free = 0, num_used = 0; |
| 5440 | 5457 | ||
| 5441 | marker_free_list = 0; | 5458 | marker_free_list = 0; |
| 5459 | marker_blocks_pending_free = 0; | ||
| 5442 | 5460 | ||
| 5443 | for (mblk = marker_block; mblk; mblk = *mprev) | 5461 | for (mblk = marker_block; mblk; mblk = *mprev) |
| 5444 | { | 5462 | { |
| @@ -5469,19 +5487,20 @@ gc_sweep () | |||
| 5469 | /* If this block contains only free markers and we have already | 5487 | /* If this block contains only free markers and we have already |
| 5470 | seen more than two blocks worth of free markers then deallocate | 5488 | seen more than two blocks worth of free markers then deallocate |
| 5471 | this block. */ | 5489 | this block. */ |
| 5472 | #if 0 | ||
| 5473 | /* There may still be pointers to these markers from a buffer's | ||
| 5474 | undo list, so don't free them. KFS 2004-05-21 / | ||
| 5475 | if (this_free == MARKER_BLOCK_SIZE && num_free > MARKER_BLOCK_SIZE) | 5490 | if (this_free == MARKER_BLOCK_SIZE && num_free > MARKER_BLOCK_SIZE) |
| 5476 | { | 5491 | { |
| 5477 | *mprev = mblk->next; | 5492 | *mprev = mblk->next; |
| 5478 | /* Unhook from the free list. */ | 5493 | /* Unhook from the free list. */ |
| 5479 | marker_free_list = mblk->markers[0].u_free.chain; | 5494 | marker_free_list = mblk->markers[0].u_free.chain; |
| 5480 | lisp_free (mblk); | ||
| 5481 | n_marker_blocks--; | 5495 | n_marker_blocks--; |
| 5496 | |||
| 5497 | /* It is not safe to free the marker block at this stage, | ||
| 5498 | since there may still be pointers to these markers from | ||
| 5499 | a buffer's undo list. KFS 2004-05-25. */ | ||
| 5500 | mblk->next = marker_blocks_pending_free; | ||
| 5501 | marker_blocks_pending_free = mblk; | ||
| 5482 | } | 5502 | } |
| 5483 | else | 5503 | else |
| 5484 | #endif | ||
| 5485 | { | 5504 | { |
| 5486 | num_free += this_free; | 5505 | num_free += this_free; |
| 5487 | mprev = &mblk->next; | 5506 | mprev = &mblk->next; |
diff --git a/src/process.c b/src/process.c index d5e76b29b98..9d76b5bd1f9 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -4581,7 +4581,8 @@ wait_reading_process_input (time_limit, microsecs, read_kbd, do_display) | |||
| 4581 | } | 4581 | } |
| 4582 | } | 4582 | } |
| 4583 | #ifdef NON_BLOCKING_CONNECT | 4583 | #ifdef NON_BLOCKING_CONNECT |
| 4584 | if (check_connect && FD_ISSET (channel, &Connecting)) | 4584 | if (check_connect && FD_ISSET (channel, &Connecting) |
| 4585 | && FD_ISSET (channel, &connect_wait_mask)) | ||
| 4585 | { | 4586 | { |
| 4586 | struct Lisp_Process *p; | 4587 | struct Lisp_Process *p; |
| 4587 | 4588 | ||
diff --git a/src/xdisp.c b/src/xdisp.c index cd62ce97f18..48f73c5c738 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -4559,6 +4559,14 @@ back_to_previous_visible_line_start (it) | |||
| 4559 | visible_p = 0; | 4559 | visible_p = 0; |
| 4560 | } | 4560 | } |
| 4561 | 4561 | ||
| 4562 | if (visible_p) | ||
| 4563 | { | ||
| 4564 | struct it it2 = *it; | ||
| 4565 | |||
| 4566 | if (handle_display_prop (&it2) == HANDLED_RETURN) | ||
| 4567 | visible_p = 0; | ||
| 4568 | } | ||
| 4569 | |||
| 4562 | /* Back one more newline if the current one is invisible. */ | 4570 | /* Back one more newline if the current one is invisible. */ |
| 4563 | if (!visible_p) | 4571 | if (!visible_p) |
| 4564 | back_to_previous_line_start (it); | 4572 | back_to_previous_line_start (it); |