Commit graph

1508 commits

Author SHA1 Message Date
naruse
94e70ce869 merge revision(s) 57767,57943: [Backport #10403]
io.c: documentation for puts

	* io.c: [DOC] clarify that the 'record separator' between
	  arguments passed to 'puts' is always a newline.
	  Based on a patch by Mark Amery. [ruby-core:65801] [Misc #10403]
	* 2017-03-13

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@57945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-03-12 18:41:38 +00:00
naruse
baf330be0a merge revision(s) 57469,57471,57472,57503,57508: [Backport #13299]
io.c: recycle garbage on write

	* string.c (STR_IS_SHARED_M): new flag to mark shared mulitple times
	  (STR_SET_SHARED): set STR_IS_SHARED_M
	  (rb_str_tmp_frozen_acquire, rb_str_tmp_frozen_release): new functions
	  (str_new_frozen): set/unset STR_IS_SHARED_M as appropriate
	* internal.h: declare new functions
	* io.c (fwrite_arg, fwrite_do, fwrite_end): new
	  (io_fwrite): use new functions

	Introduce rb_str_tmp_frozen_acquire and rb_str_tmp_frozen_release
	to manage a hidden, frozen string.  Reuse one bit of the embed
	length for shared strings as STR_IS_SHARED_M to indicate a string
	has been shared multiple times.  In the common case, the string
	is only shared once so the object slot can be reclaimed immediately.

	minimum results in each 3 measurements. (time and size)

	Execution time (sec)
	name                            trunk   built
	io_copy_stream_write            0.682   0.254
	io_copy_stream_write_socket     1.225   0.751

	Speedup ratio: compare with the result of `trunk' (greater is better)
	name    built
	io_copy_stream_write            2.680
	io_copy_stream_write_socket     1.630

	Memory usage (last size) (B)
	name                            trunk           built
	io_copy_stream_write            95436800.000    6512640.000
	io_copy_stream_write_socket     117628928.000   7127040.000

	Memory consuming ratio (size) with the result of `trunk' (greater is better)
	name    built
	io_copy_stream_write            14.654
	io_copy_stream_write_socket     16.505
	string.c (rb_str_tmp_frozen_release): release embedded strings

	Handle the embedded case first, since we may have an embedded
	duplicate and non-embedded original string.

	* string.c (rb_str_tmp_frozen_release): handled embedded strings
	* test/ruby/test_io.rb (test_write_no_garbage): new test
	  [ruby-core:78898] [Bug #13085]
	io.c (rb_io_syswrite): avoid leaving garbage after write

	As with IO#write, IO#syswrite also generates garbage which can
	be harmful in hand-coded read-write loops.

	* io.c (swrite_arg, swrite_do, swrite_end): new
	  (rb_io_syswrite): use new functions to cleanup garbage
	  [ruby-core:78898] [Bug #13085]
	Add class name to assert messages
	io.c: remove rb_ensure usage for rb_str_tmp_frozen_* calls

	Using rb_ensure pessimizes the common case and makes the code
	more difficult to read and follow.  If we hit an exceptions
	during write, just let the GC handle cleanup as the exception
	is already bad for garbage.

	* io.c (io_fwrite): call rb_str_tmp_frozen{acquire,release} directly
	  (rb_io_syswrite): ditto
	  (fwrite_do, fwrite_end, swrite_do, swrite_end): remove

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@57941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-03-12 18:15:33 +00:00
naruse
ae996ed47b merge revision(s) 57781:
docs for IO.{write,read}

	* io.c: [DOC] improve docs for IO
	  * IO.{write,read}: fix errors (:open_args is not an array of
	    strings, it might include a perm or options hash argument;
	    IO.write has no length argument, drop corresponding statement),
	    improve formatting, call-seq, grammar.
	  * IO#sync=: remove unnecessary "produces no output".
	  * other improvements.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@57930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-03-12 16:31:18 +00:00
naruse
c28229f3fc merge revision(s) 57780: [Backport #12975]
docs for IO#print

	* io.c: [DOC] split documentation for IO#print into smaller paragraphs,
	  delete duplicate sentence, fix call-seq.
	  Based on a patch by Dario Daic. [ruby-core:78291] [Bug #12975]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@57929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-03-12 16:30:08 +00:00
naruse
2105a06528 merge revision(s) 57422: [Backport #13158]
io.c: close before wait

	* io.c (io_close_fptr): notify then close, and wait for other
	  threads before free fptr.  [ruby-core:79262] [Bug #13158]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@57872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-03-11 18:07:19 +00:00
naruse
8edc6f4487 merge revision(s) 57204:
r57203 needs r57204.
	io.c: use io_close to close ARGF


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@57841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-03-11 13:23:42 +00:00
naruse
2f1cc54d5f merge revision(s) 57203:
io.c: ARGF fd leak

	* io.c (argf_next_argv): fix leak of fd after breaking in #each
	  method.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@57839 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-03-11 13:02:37 +00:00
naruse
1c13c7fa88 merge revision(s) 57199,57202,57206,57224: [Backport #13076]
io.c: fix race between read and close

	* io.c (io_fillbuf): fix race between read and close, in the case
	  the IO gets closed before the reading thread achieve the lock.
	  [ruby-core:78845] [Bug #13076]
	thread.c: fix race between read and close

	* thread.c (rb_thread_fd_close): wait until all threads using the
	  fd finish the operation, not to free the buffer in use.
	  [ruby-core:78845] [Bug #13076]
	revert a part of r57199

	* io.c (io_fillbuf): revert a part of r57199 because it broke IO#getch.
	  see also [Bug #13076]

	io.c: fix race between read and close

	* io.c (io_fillbuf): fix race between read and close and bail out
	  in the case the IO gets closed before the reading thread achieve
	  the lock.  [ruby-core:78845] [Bug #13076]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@57838 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-03-11 13:02:01 +00:00
rhe
ac8f9a0af7 io.c: [DOC] update outdated documentation of ARGF.close
As of Ruby 2.3, IO#close no longer raises IOError if the file is already
closed.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57149 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-12-22 04:40:28 +00:00
nobu
1cc9c93ff9 io.c: update argf lineno
* io.c (argf_rewind): rewind line number in non-global ARGF
  instance.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57125 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-12-20 08:25:03 +00:00
nobu
9b6e1a9f38 io.c: update argf lineno
* io.c (argf_block_call_line): update line number in non-global
  ARGF instance.  [ruby-core:78728] [Bug #13051]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57124 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-12-20 08:25:02 +00:00
nobu
a2144bd72a chomp option
* io.c (extract_getline_opts): extract chomp option.
  [Feature #12553]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56581 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-11-05 07:28:09 +00:00
nobu
4e44f6ef86 [DOC] replace Fixnum with Integer [ci skip]
* numeric.c: [DOC] update document for Integer class.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-10-26 06:11:23 +00:00
nobu
ccc9841a82 prefer rb_syserr_fail
* dir.c (dir_initialize, dir_read): prefer rb_syserr_fail over
  rb_sys_fail.

* io.c (ruby_dup, rb_sysopen): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56464 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-10-21 07:40:47 +00:00
nobu
34d420acc4 io.c: copy_stream to duplex IO
* io.c (copy_stream_body): use IO to write to copy to duplex IO.
  http://twitter.com/knu/status/786505317974585344

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56416 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-10-13 10:41:34 +00:00
nobu
446924cbb7 io.c: fix typo
* io.c (prep_io): fix typo of struct member name.
  [ruby-core:77550] [Bug #12829]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-10-11 13:08:27 +00:00
nobu
047604ad9b io.c: reduce isatty on Cygwin [ci skip]
* io.c (prep_io): reduce isatty call (and its system call) on
  Cygwin.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56383 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-10-10 03:37:09 +00:00
nobu
941621946f io.c: use RB_INTEGER_TYPE_P
* io.c (fptr_finalize): use dedicated macro RB_INTEGER_TYPE_P.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56352 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-10-06 00:19:23 +00:00
hsbt
9fff0f9459 * io.c: Fixed equivalent ruby code with core implemention.
[fix GH-1429][ci skip]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56344 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-10-05 02:47:25 +00:00
nobu
e7209358b9 io.c: check if Integer
* io.c (rb_file_initialize): check if fd is an Integer but not a
  Fixnum.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56112 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-08 08:59:00 +00:00
akr
577de1e93d replace fixnum by integer in documents.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56102 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-08 04:57:49 +00:00
usa
0df79477bd * io.c (nogvl_fsync, nogvl_fdatasync): on Windows, just ignore if the
fd is associated to non-disk device.  if call fsync and/or fdatasync
  with such fds, it causes Errno::EBADF exception and the behavior is
  incomatible with ruby 2.1 and earlier unintendedly introduced.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56036 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-08-30 05:59:17 +00:00
nobu
c463366dfd rb_funcallv
* *.c: rename rb_funcall2 to rb_funcallv, except for extensions
  which are/will be/may be gems.  [Fix GH-1406]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55773 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-07-29 11:57:14 +00:00
shugo
ceca045485 * io.c (rb_io_s_read): add description of pipes to the documentation
of IO.read.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-07-07 23:46:51 +00:00
nobu
415059abf1 io.c: convert arguments just once
* io.c (rb_io_s_foreach, rb_io_s_readlines): convert arguments
  just once before reading, instead of conversions for each lines.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55603 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-07-07 07:31:09 +00:00
hsbt
2bd2001d16 * addr2line.c: drop to support ATARI ST platform. It was discontinued
more than two decades ago. [fix GH-1350] Patch by @cremno
* include/ruby/ruby.h: ditto.
* io.c: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-28 01:46:27 +00:00
nobu
b3901a20a4 Restore documentation of ARGF
* io.c (Init_IO): [DOC] define dummy ARGF instead of ARGF.class to
  re-enable the generation of ARGF documentation.  [Fix GH-1358]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55095 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-21 02:12:55 +00:00
nobu
aa107497cd fix build on no-fork-spawnv platforms
* process.c (rb_execarg_commandline): build command line string
  from argument vector in rb_execarg.
  [ruby-core:75611] [Bug #12398]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55091 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-20 15:36:34 +00:00
nobu
cbde995b2f io.c: conditionally used functions
* io.c (pipe_atexit): only used on Windows

* io.c (rb_execarg_fixup_v): wrapper only used fork or spawnv is
  available.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55090 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-20 15:30:29 +00:00
nobu
7803106c1b io.c: use PRI_OFFT_PREFIX for off_t
* io.c (do_io_advise): use configured PRI_OFFT_PREFIX instead of
  PRI_OFF_T_PREFIX to format off_t properly on Cygwin.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55009 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-15 13:54:57 +00:00
nobu
bf5d6f0723 io.c: remove extra declarations
* io.c (rb_io_set_encoding): remove extra declarations,
  rb_std{in,out,err} are defined in this file.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-03-07 01:05:36 +00:00
nobu
38e5dd1be6 io.c: fix output of Array [ci skip]
* io.c (rb_obj_display): [DOC] fix output of Array, as Array#to_s
  is same as Array#inspect since 1.9.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54009 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-03-06 13:43:42 +00:00
nobu
d4819da611 parse without $.
* io.c (rb_io_gets_internal): read one line from an IO without
  setting ARGF.lineno.

* parse.y (lex_io_gets): use rb_io_gets_internal not to affect
  $. global variable.

* ruby.c (load_file): no longer reset $.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-24 08:21:04 +00:00
nobu
610e39e949 io.c: rb_io_open_generic
* io.c (rb_io_open_generic): split from rb_io_open without
  argument conversions.

* io.c (rb_io_s_binread): get rid of unnecessary object creation
  and conversion.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-31 03:11:14 +00:00
nobu
e7cf203103 io.c: constify
* io.c (rb_file_open_generic, pipe_open, pipe_open_s): constify
  convconfig parameter.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53696 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-31 02:58:33 +00:00
nobu
8a78e0f6c0 io.c: suppress warning
* io.c (rb_update_max_fd): get rid of unused-value warning.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53591 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-19 08:36:02 +00:00
normal
2b26565ebb io.c: remove obsolete rb_deferr global variable
This was made obsolete by r4190 back in July 2003.  Furthermore,
this existed less than 3 months as it was only introduced in
r3782.

So with absolutely no references to rb_deferr, I doubt any vim
plugin would care anymore.

ChangeLog: fixup indent of my previous commit, oops :X

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-10 04:44:08 +00:00
normal
edea151a4b IO#readpartial rejects bad args
Sometimes a sleepy developer will want to swap read_nonblock
for readpartial forget to remove "exception: false"

* io.c (io_getpartial): remove unused kwarg from template
* test/ruby/test_io.rb (test_readpartial_bad_args): new
  [Bug #11885]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-27 06:15:06 +00:00
nobu
f9adadc5e6 rb_readwrite_syserr_fail
* io.c (rb_readwrite_syserr_fail): works with the given errno than
  thread local errno.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53265 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-23 14:58:47 +00:00
nobu
f4166e2dd7 prefer rb_syserr_fail
* file.c, io.c, util.c: prefer rb_syserr_fail with saved errno
  over setting errno then call rb_sys_fail, not to be clobbered
  potentially and to reduce thread local errno accesses.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53264 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-23 08:57:48 +00:00
hsbt
52cd994814 * enum.c: fix a typo in documentation.
[ci skip][fix GH-1140] Patch by @jutaz
* io.c: ditto.
* iseq.c: ditto.
* numeric.c: ditto.
* process.c: ditto.
* string.c: ditto.
* vm_trace.c: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53105 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-14 02:52:14 +00:00
hsbt
6851be0f0c * compile.c: fix typos.
[ci skip][fix GH-1140] Patch by @jutaz
* dir.c: ditto.
* gc.c: ditto.
* io.c: ditto.
* node.h: ditto.
* thread_pthread.c: ditto.
* vm_insnhelper.c: ditto.
* vsnprintf.c: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53103 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-14 02:51:13 +00:00
nobu
add73a8713 io.c: encoding in warnings
* io.c (parse_mode_enc): preserve encoding of mode string in
  warnings.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53085 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-13 09:49:25 +00:00
nobu
b861d5473c io.c: BOM with non-UTF
* io.c (io_encname_bom_p): check BOM prefix only, not including
  UTF prefix.
* io.c (parse_mode_enc): warn BOM with non-UTF encoding.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53084 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-13 09:48:27 +00:00
nobu
ce6f0e36a3 io.c: fix stack smashing
* io.c (parse_mode_enc): fix buffer overflow.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53083 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-13 09:45:12 +00:00
normal
fae144419c IO#advise should not raise Errno::ENOSYS
As it is just a hint the kernel is free to ignore,
IO#advise already succeeds when posix_fadvise is not
available build time at all.  Following that, if posix_fadvise
was available at build time but not implemented in the running
kernel, we should also ignore it.

* io.c (do_io_advise): do not raise on ENOSYS
* test/ruby/test_io.rb (test_advise): do not skip on Errno::ENOSYS
  (test_advise_pipe): ditto
  [ruby-core:72066] [Feature #11806]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53047 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-11 22:49:27 +00:00
nobu
dec78a7a73 dir.c, io.c: use rb_id_encoding
* dir.c (dir_initialize): rb_id_encoding() returns same ID with
  caching.

* io.c (Init_IO): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-09 18:15:04 +00:00
ko1
2f5b8f0529 * *.c (*_memsize): do not check ptr.
NULL checking is finished Before call of memsize functions.
  See r52979.




git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52986 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-09 00:38:32 +00:00
nobu
7d92e5cf73 io.c: try to_io first
* io.c (copy_stream_body): try to_io conversion before read,
  readpartial, and write methods.  [ruby-dev:49008] [Bug #11199]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52750 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-25 12:23:42 +00:00
shugo
94da8b1737 * io.c (argf_getpartial): should not resize str if the second
argument is not given.
  [ruby-core:71668] [Bug #11738]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52745 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-25 01:57:48 +00:00