solaris process hangs - sockets

My process is hung on solaris.
following is the the output of truss command.
bash-3.00# truss -p 14350
write(1, 0x10057BD24, 4) (sleeping...)
Any ideas on why write is going into sleep.
following is the kernel stack.
bash-3.00# mdb -k
Loading modules: [ unix genunix specfs dtrace ufs pcisch ip hook neti sctp arp usba s1394 fcp fctl nca lofs zfs md audiosup sd cpc random crypto wrsmd fcip logindmux ptm sppp nfs ipc ]
> 0t14350::pid2proc |::walk thread |::findstack -v
stack pointer for thread 3000230c1c0: 2a102192fc1
[ 000002a102192fc1 cv_wait_sig_swap_core+0x130() ]
000002a102193071 fifo_write+0xdc(4000, 2a102193a98, 20a1, 0, 0, 600154582e0)
000002a102193131 fop_write+0x20(60015370780, 2a102193a98, 0, 3000283c910, 0, 127a574)
000002a1021931e1 write+0x268(1, 8058, 60015552268, 4, 3, 1)
000002a1021932e1 syscall_trap+0xac(1, 10057bd24, 4, 10057bd24, 10057d124, 10a)
>

Related

On Raspberry Pi 4 with Ubuntu 22.04 don't work ioctl

I have Raspberry Pi 4 (aarch64 Cortex-A72) with OS Ubuntu 22.04 LTS 64-bit installed. I try read frame from webcam Intel RealSense ID Solution F455.
buffer V4lNode::Read()
{
buffer res;
struct v4l2_buffer buf = {0};
struct timeval tv = {0};
tv.tv_sec = 0; // max time to wait for next frame
tv.tv_usec =100;
buf.type = _type;
buf.memory = V4L2_MEMORY_MMAP;
buf.index = 0;
fd_set fds;
FD_ZERO(&fds);
FD_SET(_fd, &fds);
ThrowIfFailed("wait for frame", select(_fd, &fds, NULL, NULL, &tv));
if (ioctl(_fd, VIDIOC_DQBUF, &buf) == FAILED_V4L){ // dequeue frame from buffer.
std::cout << "V4lNode failed dequeue frame from buffer: " << strerror(errno) << std::endl;
return res; //returns zero-length buffer
}
res = _buffers[buf.index];
res.size = buf.bytesused;
buf.type = _type;
buf.memory = V4L2_MEMORY_MMAP;
ThrowIfFailed("qbuffer", ioctl(_fd, VIDIOC_QBUF, &buf)); // queue next frame
return res;
}
When I run this code:
if (ioctl(fd, VIDIOC_DQBUF, &buf) < 0) {
std::cout << "V4lNode failed dequeue frame from buffer: " << strerror(errno) << std::endl;
}
I get output result:
V4lNode failed dequeue frame from buffer: Resource temporarily unavailable
But device opened success:
fd = open(path.c_str(), O_RDWR | O_NONBLOCK, 0);
std::cout << "V4lNode open files discription: " << strerror(errno) << std::endl;
Output result:
V4lNode open files discription: Success
When I run this command in terminal:
pi#pi:~$ v4l2-compliance
v4l2-compliance 1.22.1, 64 bits, 64-bit time_t
Compliance test for uvcvideo device /dev/video0:
I get error:
Control ioctls (Input 0):
fail: v4l2-test-controls.cpp(246): missing control class for class 00980000
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: FAIL
Full tets output:
pi#pi:~$ v4l2-compliance
v4l2-compliance 1.22.1, 64 bits, 64-bit time_t
Compliance test for uvcvideo device /dev/video0:
Driver Info:
Driver name : uvcvideo
Card type : Intel F450
Bus info : usb-0000:01:00.0-1.1
Driver version : 5.15.39
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : Intel F450
Serial : 00.00.01
Bus info : usb-0000:01:00.0-1.1
Media version : 5.15.39
Hardware revision: 0x00000100 (256)
Driver version : 5.15.39
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : Intel F450
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
Link 0x02000010: from remote pad 0x100000a of entity 'Extension 3' (Video Pixel Formatter): Data, Enabled, Immutable
Required ioctls:
test MC information (see 'Media Driver Info' above): OK
test VIDIOC_QUERYCAP: OK
test invalid ioctls: OK
Allow for multiple opens:
test second /dev/video0 open: OK
test VIDIOC_QUERYCAP: OK
test VIDIOC_G/S_PRIORITY: OK
test for unlimited opens: OK
Debug ioctls:
test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
test VIDIOC_LOG_STATUS: OK (Not Supported)
Input ioctls:
test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
test VIDIOC_ENUMAUDIO: OK (Not Supported)
test VIDIOC_G/S/ENUMINPUT: OK
test VIDIOC_G/S_AUDIO: OK (Not Supported)
Inputs: 1 Audio Inputs: 0 Tuners: 0
Output ioctls:
test VIDIOC_G/S_MODULATOR: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_ENUMAUDOUT: OK (Not Supported)
test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 Audio Outputs: 0 Modulators: 0
Input/Output configuration ioctls:
test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
test VIDIOC_G/S_EDID: OK (Not Supported)
Control ioctls (Input 0):
fail: v4l2-test-controls.cpp(246): missing control class for class 00980000
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: FAIL
test VIDIOC_QUERYCTRL: OK
test VIDIOC_G/S_CTRL: OK
warn: v4l2-test-controls.cpp(757): g_ext_ctrls(0) invalid error_idx 0
test VIDIOC_G/S/TRY_EXT_CTRLS: OK
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 1 Private Controls: 0
Format ioctls (Input 0):
test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
test VIDIOC_G/S_PARM: OK
test VIDIOC_G_FBUF: OK (Not Supported)
test VIDIOC_G_FMT: OK
test VIDIOC_TRY_FMT: OK
warn: v4l2-test-formats.cpp(1036): Could not set fmt2
test VIDIOC_S_FMT: OK
test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
test Cropping: OK (Not Supported)
test Composing: OK (Not Supported)
test Scaling: OK (Not Supported)
Codec ioctls (Input 0):
test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
test VIDIOC_G_ENC_INDEX: OK (Not Supported)
test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
Buffer ioctls (Input 0):
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
test VIDIOC_EXPBUF: OK
test Requests: OK (Not Supported)
Total for uvcvideo device /dev/video0: 46, Succeeded: 45, Failed: 1, Warnings: 2
Confuses a lot notes (Not Supported).
UPD:
Outputs formats:
pi#pi:~$ v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'YUYV' (YUYV 4:2:2)
Output dmesg errors:
[ 0.823576] zswap: compressor zstd not available, using default lzo
[ 0.829609] zswap: zpool z3fold not available, using default zbud
[ 102.238315] uvcvideo 1-1.1:1.1: Failed to resubmit video URB (-1).
[ 102.238626] uvcvideo 1-1.1:1.1: Failed to resubmit video URB (-1).
[ 5822.239686] usb 1-1.1: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
[ 5822.249854] usb 1-1.1: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
[ 5822.259913] usb 1-1.1: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
[ 5822.269949] usb 1-1.1: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
[ 5822.280057] usb 1-1.1: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
[ 5822.290139] usb 1-1.1: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
[ 5822.391565] usb 1-1.1: Failed to query (SET_CUR) UVC control 4 on unit 1: -32 (exp. 4).
[ 5822.401637] usb 1-1.1: Failed to query (SET_CUR) UVC control 4 on unit 1: -32 (exp. 4).
[ 5822.411679] usb 1-1.1: Failed to query (SET_CUR) UVC control 4 on unit 1: -32 (exp. 4).
[ 5822.421697] usb 1-1.1: Failed to query (SET_CUR) UVC control 4 on unit 1: -32 (exp. 4).
[ 5822.431779] usb 1-1.1: Failed to query (SET_CUR) UVC control 4 on unit 1: -32 (exp. 4).
[ 5822.441885] usb 1-1.1: Failed to query (SET_CUR) UVC control 4 on unit 1: -32 (exp. 4).
[ 5822.532650] usb 1-1.1: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
[ 5822.563375] usb 1-1.1: Failed to query (SET_CUR) UVC control 4 on unit 1: -32 (exp. 4).
[ 5822.622056] usb 1-1.1: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
[ 5823.168241] usb 1-1.1: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
[ 5823.270367] usb 1-1.1: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
I am tried this solution Recording usb cam on raspberry pi with ffmpeg - usb troubleshooting - don't worked
Ubuntu 22 is not supported by realsense yet (setember 7, 2022) acconding to
https://github.com/IntelRealSense/librealsense/issues/10439
I was able to run it on Ubuntu 22 only via docker with this Dockerfile:
FROM python:3.7.4
WORKDIR /home
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update && apt-get install -y \
sudo \
cmake \
git \
curl \
libopencv-dev \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libgtk2.0-dev \
python-numpy \
python-pycurl \
keyboard-configuration \
libgl1-mesa-dev \
libglu1-mesa-dev \
libusb-1.0-0-dev \
libglfw3-dev \
freeglut3 \
at \
freeglut3-dev \
nano \
curl \
libglfw3-dev \
libgl1-mesa-dev \
libglu1-mesa-dev \
at \
udev \
linux-headers-* \
libusb-1.0-0-dev
#update cmake
RUN sudo apt remove cmake -y && \
wget https://github.com/Kitware/CMake/releases/download/v3.23.0/cmake-3.23.0.tar.gz && \
tar -xf cmake-3.23.0.tar.gz && \
cd cmake-3.23.0 && \
./configure && \
make -j$(nproc) && \
sudo make install -j$(nproc)
#install realsense
RUN git clone https://github.com/IntelRealSense/librealsense && \
cd librealsense && \
git checkout v2.51.1 && \
mkdir -p /etc/udev/rules.d && \
mkdir build && cd build && \
cmake .. && \
make install -j$(nproc) && \
make -j$(nproc)
built as:
docker build -t realsense .
if you need any GUI to be used, run this before running the container:
export DISPLAY=:1
xhost +
(maybe you will need to use DISPLAY=:0 depending on your display index)
and run the container with:
sudo docker run -it --privileged -v /etc/udev/*:/etc/udev/* \
-v /dev/bus/usb:/dev/bus/usb \
-v /dev/:/dev/ \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY -h $HOSTNAME -v $HOME/.Xauthority:/home/.Xauthority realsense:latest bash

How do I access the data from rp_remote_acquire?

I currently have a python program that (very slowly) recieves data from a Red Pitaya board by recursively calling:
redpitaya_scpi.scpi(192.169.1.100).rx_txt()
I would like to use rp_remote_acquire to achieve a higher throughput with a ring buffer.
I am able to execute ./rp_remote_acquire on both the Red Pitaya (server) and a linux machine (client) thanks to stackoverflow.
I get some unique content in /tmp/out every time I execute the following commands on the Red Pitaya (which suggests that the program on the server has access to the data from its hardware).
rm /tmp/out
./rp_remote_acquire -m 3
cat /tmp/out
In order to transfer data from the Red Pitaya (client) to the linux machine (server), I launch ./rp_remote_acquire with the following parameters:
Server (192.169.1.100):
./rp_remote_acquire -m 2 -a 192.169.1.102 -p 14000
Client (192.169.1.102):
./rp_remote_acquire -m 1 -a 192.169.1.100 -p 14000
Where:
-m --mode <(1|client)|(2|server)|(3|file)>
operating mode (default client)
-a --address <ip_address>
target address in client mode (default empty)
-p --port <port_num>
port number in client and server mode (default 14000)
Both machines are able ping eachother and the machines are able to establish a connection (ie. int connection_start(option_fields_t *options, struct handles *handles) at transfer.c:251 returns zero).
The client ends up executing the following code snippet from transfer.c
533 while (!size || transferred < size) {
(gdb) n
534 if (pos == buf_size)
(gdb) n
539 if (pos + CHUNK <= curr) {
(gdb) n
552 memcpy(buf, mapped_base + pos, len);
(gdb) n
554 if (handles->sock >= 0) {
(gdb) n
552 memcpy(buf, mapped_base + pos, len);
(gdb) n
554 if (handles->sock >= 0) {
(gdb) n
555 if (send_buffer(handles->sock, options, buf, len) < 0) {
(gdb) n
569 pos += len;
(gdb) n
533 while (!size || transferred < size) {
It seems like the client is effectively just doing the following (note size = 0 by default):
533 while (!size || transferred < size) {
552 memcpy(buf, mapped_base + pos, len);
552 memcpy(buf, mapped_base + pos, len);
569 pos += len;
}
This behaviour seems to be the intention of the programmer because the client stops as soon as the server is halted:
554 if (handles->sock >= 0) {
(gdb)
556 if (!interrupted)
the program doesn't get stuck in this loop when I change size such that it is not equal to zero (=> smaller packets?).
I would like to be able to access the data that is (hopefully) being sent from the Red Pitaya (server) to the linux machine (client) and somehow make this data available to a python program on the client machine.
My question(s):
What is going on here and how can I access the data?
Do I need to synchronously run a second program on the client that somehow reads the data that rp_remote_acquire is copying into the clients memory?
The solution is surprisingly simple.
When it is running properly in server mode, rp_remote_acquire writes the data to a socket:
/*
* transfers samples to socket via read() call on rpad_scope
*/
static u_int64_t transfer_readwrite(struct scope_parameter *param,
option_fields_t *options, struct handles *handles)
In client mode it reads the data from the socket and does something with it.
Since we are working with sockets here, we don't need to care what rp_remote_acquire does in client mode. We can simply create our own socket with a python script and recieve the data in the script (which is where I want to have the data).
This is an example from #otobrzo:
import socket
import numpy as np
import matplotlib.pyplot as plt
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip=socket.gethostbyname("XX.XX.XX.XX") # IP of redpitaya in server mode:
# run cat ddrdump.bit > /dev/xdevcfg
#compiled and run on redpitay ./rp_remote_acquire -m 2 -k 0 -c 0 -d 0
port=14000 # default port for TCP
address=(ip,port)
client.connect(address)
Nl = 10000
#while True:
for x in range(0, Nl):
# print("test1")
bytes_data = client.recv(1024) # set the amount data transferred
if x == 0:
data = np.frombuffer(bytes_data, dtype=np.int16) # from 16bit data to int16
data = np.array(data, dtype=float)
data_all = data
else:
data = np.frombuffer(bytes_data, dtype=np.int16) # from 16bit data to int16
data = np.array(data, dtype=float)
data_all= np.hstack((data_all,data))
#%%
FPS = 125e6
time = np.arange(0,np.size(data_all))/FPS
plt.plot(time,data_all)

Not running RabbitMQ on Linux, can not find the file asn1.app

I installed on CentOs successfully ever. However, here is another CentOs I used, and it failed to stared rabbitMq.
My erlang from here.
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
this is my erl_crash.dump.
erl_crash_dump:0.5
Sat Jun 23 09:17:30 2018
Slogan: init terminating in do_boot ({error,{no such file or directory,asn1.app}})
System version: Erlang/OTP 20 [erts-9.3.3] [source] [64-bit] [smp:24:24] [ds:24:24:10] [async-threads:384] [hipe] [kernel-poll:true]
Compiled: Tue Jun 19 22:25:03 2018
Taints: erl_tracer,zlib
Atoms: 14794
Calling Thread: scheduler:2
=scheduler:1
Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
Scheduler Sleep Info Aux Work:
Current Port:
Run Queue Max Length: 0
Run Queue High Length: 0
Run Queue Normal Length: 0
Run Queue Low Length: 0
Run Queue Port Length: 0
Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
Current Process:
=scheduler:2
Scheduler Sleep Info Flags:
Scheduler Sleep Info Aux Work: THR_PRGR_LATER_OP
Current Port:
Run Queue Max Length: 0
Run Queue High Length: 0
Run Queue Normal Length: 0
Run Queue Low Length: 0
Run Queue Port Length: 0
Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK | NONEMPTY | EXEC
Current Process: <0.0.0>
Current Process State: Running
Current Process Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | TRAP_EXIT | ON_HEAP_MSGQ
Current Process Program counter: 0x00007fbd81fa59c0 (init:boot_loop/2 + 64)
Current Process CP: 0x0000000000000000 (invalid)
how to identify this problem ? Thank you.

How to run scapy in cooked mode?

I have a problem with capturing traffic.
My system is configured with two iterfaces - ethX and tunelX.
tunelX is a tunneling iterface.
The scapy and tcpdump are capture different count of packets.
The problem is the tcpdump runs, if the "any" iterface was set, in cooked mode but scapy don't.
cooked mode means that the SOCK_DGRAM will be created instead the SOCK_RAW. It is nessesary because some data in "tunneling packtes" in link-layer might be missing or contain not enoght data to determinate type of the packet.
When I ran strace with my scapy sctipt I saw this.
927698 socket(PF_PACKET, SOCK_RAW, 768) = 4
927689 recvfrom(3, "..some-data..."..., 65535, 0, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "...some address...", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 105
927689 recvfrom(3, "..some-data..."..., 32767, 0, {sa_family=AF_PACKET, proto=0x86dd, if4, pkttype=PACKET_HOST, addr(6)={1, 30d17e75727f}, [18]) = 246
927689 recvfrom(3, "..some-data..."..., 32767, 0, {sa_family=AF_PACKET, proto=0x86dd, if4, pkttype=PACKET_HOST, addr(6)={1, 30d17e75727f}, [18]) = 86
927689 recvfrom(3, "..some-data..."..., 32767, 0, {sa_family=AF_PACKET, proto=0x86dd, if4, pkttype=PACKET_HOST, addr(6)={1, 30d17e75727f}, [18]) = 86
927689 recvfrom(3, "..some-data..."..., 32767, 0, {sa_family=AF_PACKET, proto=0x86dd, if4, pkttype=PACKET_OUTGOING, addr(6)={1, 90e2ba55f6e8}, [18]) = 271
The only last packet was added into dump.
The question is:
Is my assumption right? :) How can I launch scapy in cooked mode? I couldn't find this in manual.
Thank you.

Steps to build Perl 5.6.2 in Cygwin 1.7.11

I cannot seem to build perl 5.6.2 in Cygwin 1.7.11.
Here are the steps I am following to do it so far.
Download perl 5.6.2 source from website and untar to some folder "perl-5.6.2"
cd perl-5.6.2/bld
sh ../Configure -des -Dmksymlinks -Dprefix=/common/ndd/perl/5.6.2 -DDEBUGGING 2>&1
make 2>&1
make install 2>&1
Here are the logs from this:
http://pastebin.com/pqLg4S7z
What happens is make creates "perl-5.6.2/bld/perl.exe" and this file generates an abort signal every time.
Here is the backtrace from running gdb on it. (Note: I configured with -DDEBUGGING so all the gcc debug flags should be enabled.)
(gdb) run
Starting program: /openlogic/build/work/perl-5.6.2/bld/perl.exe
[New Thread 3348.0xf54]
[New Thread 3348.0x48c]
Program received signal SIGABRT, Aborted.
0x00000000 in ?? ()
(gdb) backtrace
#0 0x00000000 in ?? ()
#1 0x7792f8b1 in ntdll!RtlUpdateClonedSRWLock ()
from /cygdrive/c/Windows/system32/ntdll.dll
#2 0x757f0a91 in WaitForSingleObjectEx ()
from /cygdrive/c/Windows/syswow64/KERNELBASE.dll
#3 0x000000a8 in ?? ()
#4 0x00000000 in ?? ()
(gdb) quit
Here id the ldd.exe command ran on perl.exe
$ ldd /ndipiazza/build/work/perl-5.6.2/bld/perl.exe
ntdll.dll => /cygdrive/c/Windows/SysWOW64/ntdll.dll (0x77910000)
kernel32.dll => /cygdrive/c/Windows/syswow64/kernel32.dll (0x75cb0000)
KERNELBASE.dll => /cygdrive/c/Windows/syswow64/KERNELBASE.dll (0x757e0000)
libperl5_6_2.dll => /ndipiazza/build/work/perl-5.6.2/bld/libperl5_6_2.dll (0x66140000)
cygcrypt-0.dll => /usr/bin/cygcrypt-0.dll (0x67db0000)
cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
??? => ??? (0x570000)
Can anyone see why I would be getting this sigabrt?
EDIT: here is a link to a discussion going on in Cygwin mailing list: http://cygwin.com/ml/cygwin/2012-07/msg00368.html
5.6 is outdated for your build environment. Maintenance patches exist.
I recommend to install perlbrew and patchperl:
$ perlbrew install-patchperl
which will DTRT.
This question is above my pay grade and this is a shot in the dark, but the two things I remember that ruin a perl5.6.2 build on Cygwin are
spaces in the $PATH (e.g. /cygdrive/c/Program Files/BlahBlahBlah)
configure script unable to determine the signal names
Check your config.sh script and see whether it contains lines like
sig_count='1'
sig_name='ZERO '
sig_name_init='"ZERO", 0'
sig_num='0 '
sig_num_init='0, 0'
You want it to say something like
sig_count='33'
sig_name='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH LOST USR1 USR2 RTMAX CLD POLL PWR RTMIN '
sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "URG", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "IO", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "LOST", "USR1", "USR2", "RTMAX", "CLD", "POLL", "PWR", "RTMIN", 0'
sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 20 23 29 32 '
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 20, 23, 29, 32, 0'
(I copied these values from a config.sh from a build for a newer version of Perl. The values you need may vary slightly)
I figured it out. Perl 5.6.2 tries to use it's own malloc. This is incompatible with Cygwin's malloc.
I was given some help on Cygwin mailing list to fix this: http://cygwin.com/ml/cygwin/2012-07/msg00380.html
Bottom line, add -Dusemymalloc=n to the sh ./Configure arguments.
Then it works.