syswrite "Bad file descriptor" after successfully writing to thatfile handle

  • Thread starter Robert Jacobson
  • Start date
R

Robert Jacobson

I'm having some trouble figuring out an error that I'm getting.
syswrite is failing to write; $! is "Bad file descriptor". What
boggles my mind is that this is after some data had already been
written successfully to the file handle!

This problem seems to be linked to a recent change I made to my
program. My program is basically a network socket data collector,
running on Windows with ActivePerl 5.8.8 (build 819)

- open data file (sysopen)
- connect to server socket
- while read from server socket OK
- write data to file
- if X time elapsed:
- close file
- open new file

I recently changed my program to add "use threads", and add a
conversion program in that thread

....
- if X time elapsed:
- close file
- new thread for &convert_file(). I call $thread->detach
immediately after creation
- open new file

After I made the above change, syswrite started *occassionally*
returning undef, and setting $! to "Bad file descriptor". Again, most
of the time it works. When it fails, it does seem to be while
convert_file() is still running. It takes about 10 seconds to convert
the file; that's why I'm using a separate thread. The program writes
about 400 kB to the file, then I get the "Bad file descriptor" error.

For kicks, I tried changing syswrite() to print(), but it also seems
to be having trouble.

So, what should my next troubleshooting steps be?
 
R

Robert Jacobson

- if X time elapsed:
- close file
- new thread for &convert_file(). I call $thread->detach

I think I have fixed the problem, though I still don't know why it was
occurring.

In convert_file(), I was using a system() call to start an external
perl script. I basically copied the perl code from that external
script into convert_file(), and the problem seems to have gone away.
At least, I didn't have any problems in the past 16 hours or so.

If anyone can tell me -- is using system() inside a thread "bad" for
some reason? If so, why?
 
B

Ben Morrow

Quoth Robert Jacobson said:
I think I have fixed the problem, though I still don't know why it was
occurring.

In convert_file(), I was using a system() call to start an external
perl script. I basically copied the perl code from that external
script into convert_file(), and the problem seems to have gone away.
At least, I didn't have any problems in the past 16 hours or so.

If anyone can tell me -- is using system() inside a thread "bad" for
some reason? If so, why?

Likely some interaction between system and threads and pseudo-fork. Can
you post a *minimal* example that reproduces the problem, including your
versions of perl, threads and threads::shared? Have you tried upgrading
to the latest threads?

Ben
 
R

Robert Jacobson

Quoth Robert Jacobson <[email protected]>:







Likely some interaction between system and threads and pseudo-fork. Can
you post a *minimal* example that reproduces the problem, including your
versions of perl, threads and threads::shared? Have you tried upgrading
to the latest threads?

Ben

Thanks for responding.

I'll see if I can reduce it to a minimal example and post it here.

I am using ActivePerl 5.8.8 (build 819) (32-bit). The threads version
is whatever ActivePerl came with. I did not use threads::shared.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top