Hello everyone. I'm having an odd issue that's got me stumped. My GAMBAS
app opens several fluidsynth daemons listening on different ports and
communicates with them over a socket. While they do all send and receive
commands properly, when I issue the "quit" command to any of the
fluidsynth daemons they don't actually terminate. They do respond with
"Cheers!", which is what they say when they terminate, but the processes
remain and they continue responding to commands. I have to use SHELL
"pkill fluidsynth", which leaves the daemons unable to be restarted
because they can't bind to their designated port/socket afterward for
some reason.

At first I thought it was fluidsynth behaving badly, but I'm able to
telnet to the fluidsynth daemon and issue the "quit" command
successfully using the same shell command as GAMBAS. I'm starting
fluidsynth with the following command:

SHELL "fluidsynth --connect-jack-outputs --no-shell --verbose --server
--audio-driver=jack --midi-channels=1 --portname=LiquidSynth01
-oshell.port=9800 -oaudio.jack.id=LiquidSynth01 -omidi.driver=alsa_seq
-omidi.portname=LiquidSynth01 -omidi.alsa_seq.id=LiquidSynth01"

My code to stop the fluidsynth daemons is:

DIM i AS Integer

' Stop FluidSynth.
FOR i = 1 TO 16
  Send_To_FluidSynth("quit", i)
  SLEEP 0.125
NEXT

PUBLIC SUB Send_To_FluidSynth(FluidString AS String, Daemon AS Integer)

  ' Send a command to FluidSynth
  DIM Timeout AS Single
  FluidString = FluidString & "\n" ' Add carriage return to command is
executed.
  Socket = NEW Socket
  Socket.Connect("localhost", 9799 + Daemon)
  DO WHILE (Socket.Status <> 7) AND (Socket.Status > 0)
    WAIT 0.1
    Timeout = Timeout + 0.1
    IF Timeout >= 0.25 THEN EXIT 
  LOOP
  Timeout = 0
  IF Socket.Status = 7 THEN 
    ' Socket is good, send command.
    WRITE #Socket, FluidString, Len(FluidString)
    PRINT "Sending command to FluidSynth daemon: " & FluidString
  END IF
  DO WHILE Lof(Socket) = 0
    WAIT 0.1
    Timeout = Timeout + 0.1
    IF Timeout >= 0.25 THEN EXIT
  LOOP 
  READ #Socket, FluidString, Lof(Socket)
  PRINT "FluidSynth daemon replies with: " & FluidString
  CLOSE #Socket

END

As you can see there are 16 fluidsynth daemons starting at port 9800 and
going up to port 9815. The for/next loop just cycles through these 16
ports to terminate each process sequentially. I added the timeout stuff
because if the code runs with no fluidsynth processes active/listening
it just hangs there in the do/loop loops.

Here's my debug/console output right after trying to quit the fluidsynth
daemons, including anything they replied with:

Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Sending command to FluidSynth daemon: quit
FluidSynth daemon replies with: cheers!
Terminated
WARNING: Child process terminated by signal 15
cannot read server event (Success)
cannot complete execution of the processing graph (Resource temporarily
unavailable)
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
cannot complete execution of the processing graph (Success)
cannot complete execution of the processing graph (Success)
zombified - calling shutdown handler
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
zombified - calling shutdown handler
fluidsynth: error: Help! Lost the connection to the JACK server
Failure to resume: Invalid argument

The messages about JACK are because JACK is terminated after I attempt
to terminate the fluidsynth daemons. Of course if they actually
terminated properly they'd have nothing to complain about. I have no
idea what's up with the "zombified" messages. Any ideas anyone?

Kevin Fishburne 
Eight Virtues 
www:
e-mail:
phone: 
 http://sales.eightvirtues.com
 sa...@eightvirtues.com
 (770) 853-6271 

------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user

Reply via email to