linux_waitpid() hangs: sqlplus on exit of external editor

Marcin Cieslak saper at SYSTEM.PL
Wed Sep 13 16:32:18 PDT 2006


Oracle sqlplus utility may invoke external $EDITOR to edit last query.
Under linux emulation sqlplus hangs however after it returns from the editor.

It does not matter if binary is FreeBSD (tried /usr/bin/vi, /usr/bin/ed
or Linux - tried /compat/linux/bin/ls). Tried Oracle XE sqlplus as well
as Oracle Instant Client sqlplus.

Sample session (/usr/bin/ed as the editor):

% ktrace sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Sep 14 01:13:09 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> set hea off
SQL> select * from dual;

X

SQL> edit
Wrote file afiedt.buf
21
,p
select * from dual
/
w
21
q
<hangs, you can still type>

ps:

   UID   PID  PPID CPU PRI NI   VSZ   RSS MWCHAN STAT  TT       TIME COMMAND
    99 41365 41350   0   8  0 20528  6996 wait   I+    p1    0:00.09 sqlplus / 
as sysdba

Child process is gone (child process trace shows normal exit(0)).

End of linux_kdump (invoking process only).

  41365 sqlplus  CALL  write(0x1,0x490d0000,0x16)
  41365 sqlplus  GIO   fd 1 wrote 22 bytes
        "Wrote file afiedt.buf
        "
  41365 sqlplus  RET   write 22/0x16
  41365 sqlplus  CALL  linux_brk(0x80fc000)
  41365 sqlplus  RET   linux_brk 135249920/0x80fc000
  41365 sqlplus  CALL  linux_fork
  41365 sqlplus  RET   linux_fork 41367/0xa197
  41365 sqlplus  CALL  linux_rt_sigaction(0x2,0xbfbfb294,0xbfbfb208,0x8)
  41365 sqlplus  RET   linux_rt_sigaction 0
  41365 sqlplus  CALL  linux_rt_sigaction(0x3,0xbfbfb294,0xbfbfb208,0x8)
  41365 sqlplus  RET   linux_rt_sigaction 0
  41365 sqlplus  CALL  linux_rt_sigaction(0x11,0xbfbfb294,0xbfbfb208,0x8)
  41365 sqlplus  RET   linux_rt_sigaction 0
  41365 sqlplus  CALL  linux_waitpid(0xa197,0xbfbfb648,0)

I have attempted to reproduce the problem using system() or fork() and execve() 
to reproduce this behaviour behaves correctly, i.e. Linux binary invoking 
FreeBSD binary works fine.

Any ideas where the problem might be?

-- 
               << Marcin Cieslak // saper at system.pl >>


More information about the freebsd-emulation mailing list